Transients API for save $operations
Этот коммит содержится в:
		
							
								
								
									
										95
									
								
								batch.php
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								batch.php
									
									
									
									
									
								
							| @@ -7,11 +7,6 @@ | |||||||
|  * Author URI: http://belousovv.ru/ |  * Author URI: http://belousovv.ru/ | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| // Create table on activate |  | ||||||
| register_activation_hook( ABSPATH . PLUGINDIR . '/batch_operations/batch.php', 'batch_operations_install'); |  | ||||||
| // Delete table if deactivate |  | ||||||
| register_deactivation_hook( ABSPATH . PLUGINDIR . '/batch_operations/batch.php', 'batch_operations_deactivate' ); |  | ||||||
|  |  | ||||||
| // Add backend page without menu item | // Add backend page without menu item | ||||||
| add_action( 'admin_menu', 'batch_operations_add_page' ); | add_action( 'admin_menu', 'batch_operations_add_page' ); | ||||||
|  |  | ||||||
| @@ -24,44 +19,6 @@ add_action( 'init', 'batch_operations_load_translation_file'); | |||||||
| global $batch_operations_version; | global $batch_operations_version; | ||||||
| $batch_operations_version = '0.1.0'; | $batch_operations_version = '0.1.0'; | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Create table on activate |  | ||||||
|  */ |  | ||||||
| function batch_operations_install () { |  | ||||||
|   if ( ! current_user_can( 'activate_plugins' ) ) |  | ||||||
|     return; |  | ||||||
|  |  | ||||||
|   global $wpdb; |  | ||||||
|  |  | ||||||
|   $table_name = $wpdb->prefix . 'batch_operations'; |  | ||||||
|   //WP>=3.5 |  | ||||||
|   $charset_collate = $wpdb->get_charset_collate(); |  | ||||||
|  |  | ||||||
|   $sql = "CREATE TABLE $table_name ( |  | ||||||
| 	  `id` bigint(20) NOT NULL AUTO_INCREMENT, |  | ||||||
|     `operations` longtext NOT NULL, |  | ||||||
|     PRIMARY KEY (`id`) |  | ||||||
| 	) $charset_collate AUTO_INCREMENT=1;"; |  | ||||||
|  |  | ||||||
|   require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); |  | ||||||
|   dbDelta( $sql ); |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Delete table if deactivate |  | ||||||
|  */ |  | ||||||
| function batch_operations_deactivate(){ |  | ||||||
|   if ( ! current_user_can( 'activate_plugins' ) ) |  | ||||||
|     return; |  | ||||||
|  |  | ||||||
|   global $wpdb; |  | ||||||
|  |  | ||||||
|   $query = 'DROP TABLE `' . $wpdb->prefix . 'batch_operations' . '`'; |  | ||||||
|   $wpdb->query( $query ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function batch_operations_load_translation_file() { | function batch_operations_load_translation_file() { | ||||||
|   load_plugin_textdomain( 'batch-operations', false, '/batch_operations/languages' ); |   load_plugin_textdomain( 'batch-operations', false, '/batch_operations/languages' ); | ||||||
| } | } | ||||||
| @@ -78,27 +35,30 @@ function batch_operations_add_page() { | |||||||
|  */ |  */ | ||||||
| function batch_operations_page_view() { | function batch_operations_page_view() { | ||||||
|   global $batch_operations_version; |   global $batch_operations_version; | ||||||
|   global $wpdb; |  | ||||||
|   //WP>=3.3 |  | ||||||
|   wp_enqueue_script( 'jquery' ); |   wp_enqueue_script( 'jquery' ); | ||||||
|   wp_enqueue_script( 'batch_operations_script', plugin_dir_url('') . 'batch_operations/js/batch.min.js', array(), $batch_operations_version ); |   wp_enqueue_script( 'batch_operations_script', plugin_dir_url('') . 'batch_operations/js/batch.min.js', array(), $batch_operations_version ); | ||||||
|   wp_enqueue_style( 'batch_operations_script', plugin_dir_url('') . 'batch_operations/css/batch.css', array(), $batch_operations_version ); |   wp_enqueue_style( 'batch_operations_script', plugin_dir_url('') . 'batch_operations/css/batch.css', array(), $batch_operations_version ); | ||||||
|  |  | ||||||
|   $id = ( intval( $_REQUEST["id"] ) < 0 )? 0 : intval( $_REQUEST["id"] ); |   $id = ( empty( $_REQUEST["id"] ) )? 0 : $_REQUEST["id"]; | ||||||
|  |   if ( ! preg_match( '/^[\d,A-F]*$/', $id ) || ( strlen( $id ) != 39 ) ) { | ||||||
|  |     $id = 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   $current_array = $wpdb->get_var( 'SELECT `operations` FROM `' . $wpdb->prefix . "batch_operations` WHERE `id` = $id;" ); |   if ( false === ( $current_array = get_transient( 'batch_' . $id ) ) ) { | ||||||
|  |     $id = 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   $title = __( 'Processing', 'batch-operations' ); |   $title = __( 'Processing', 'batch-operations' ); | ||||||
|   $init_message = ''; |   $init_message = ''; | ||||||
|   if ( ! empty( $current_array ) ) { |   if ( ! empty( $current_array ) ) { | ||||||
|     $current_array = unserialize( $current_array ); |  | ||||||
|     $title = ( empty ( $current_array['title'] ) ) ? $title : $current_array['title'] ; |     $title = ( empty ( $current_array['title'] ) ) ? $title : $current_array['title'] ; | ||||||
|     $init_message = ( empty ( $current_array['init_message'] ) ) ? __( 'Initializing.', 'batch-operations' ) : $current_array['init_message'] ; |     $init_message = ( empty ( $current_array['init_message'] ) ) ? __( 'Initializing.', 'batch-operations' ) : $current_array['init_message'] ; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   ?> |   ?> | ||||||
|   <script type="text/javascript"> |   <script type="text/javascript"> | ||||||
|     var batch_id=<?php print $id; ?>,successful_page='<?php print get_admin_url(); ?>'; |     var batch_id='<?php print $id; ?>',successful_page='<?php print get_admin_url(); ?>'; | ||||||
|   </script> |   </script> | ||||||
|   <div class="wrap"> |   <div class="wrap"> | ||||||
|     <h2><?php echo $title ?></h2> |     <h2><?php echo $title ?></h2> | ||||||
| @@ -113,22 +73,18 @@ function batch_operations_page_view() { | |||||||
| } | } | ||||||
|  |  | ||||||
| function batch_operations_process () { | function batch_operations_process () { | ||||||
|   global $wpdb; |   $id = ( empty( $_REQUEST["id"] ) )? 0 : $_REQUEST["id"]; | ||||||
|   $id = ( intval( $_REQUEST["id"] ) < 0 )? 0 : intval( $_REQUEST["id"] ); |   if ( ! preg_match( '/^[\d,A-F]*$/', $id ) || ( strlen( $id ) != 39 ) ) { | ||||||
|  |  | ||||||
|   if ( 1 > $id ){ |  | ||||||
|     wp_send_json( array( 'do' => 'finish' ) ); |     wp_send_json( array( 'do' => 'finish' ) ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   $current_array = $wpdb->get_var( 'SELECT `operations` FROM `' . $wpdb->prefix . "batch_operations` WHERE `id` = $id;" ); |   if ( false === ( $current_array = get_transient( 'batch_' . $id ) ) ) { | ||||||
|   if ( empty( $current_array ) ) { |  | ||||||
|     wp_send_json( array( 'do' => 'finish' ) ); |     wp_send_json( array( 'do' => 'finish' ) ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   $result['do'] = ''; |   $result['do'] = ''; | ||||||
|   $start = time() + 1; |   $start = time() + 1; | ||||||
|   $flag = true; |   $flag = true; | ||||||
|   $current_array = unserialize( $current_array ); |  | ||||||
|  |  | ||||||
|   while ($flag) { |   while ($flag) { | ||||||
|     //make array of parameters for function |     //make array of parameters for function | ||||||
| @@ -170,15 +126,9 @@ function batch_operations_process () { | |||||||
|   $result['message'] = $current_array['context']['message']; |   $result['message'] = $current_array['context']['message']; | ||||||
|  |  | ||||||
|   if ( '' == $result['do'] ) { |   if ( '' == $result['do'] ) { | ||||||
|     $wpdb->update( |     set_transient( 'batch_' . $id, $current_array , WEEK_IN_SECONDS ); | ||||||
|       $wpdb->prefix . 'batch_operations', |  | ||||||
|       array( 'operations' => serialize( $current_array ) ), |  | ||||||
|       array( 'id' => $id ), |  | ||||||
|       array( '%s' ), |  | ||||||
|       array( '%d' ) |  | ||||||
|     ); |  | ||||||
|   } else { |   } else { | ||||||
|     $wpdb->query( 'DELETE FROM `' . $wpdb->prefix . 'batch_operations' . "` WHERE `id`=$id ;" ); |     delete_transient( 'batch_' . $id ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   wp_send_json( $result ); |   wp_send_json( $result ); | ||||||
| @@ -238,7 +188,7 @@ function batch_operations_process () { | |||||||
|  */ |  */ | ||||||
| function batch_operations_start($batch_arr) | function batch_operations_start($batch_arr) | ||||||
| { | { | ||||||
|   global $wpdb; |   $id = rand( 100, 999 ) . strtoupper( md5( date( 'YMDBs' ) ) ) . rand( 1000, 9999 ); | ||||||
|  |  | ||||||
|   $batch_arr['context'] = array( |   $batch_arr['context'] = array( | ||||||
|     'message'  => '', |     'message'  => '', | ||||||
| @@ -250,20 +200,11 @@ function batch_operations_start($batch_arr) | |||||||
|   $batch_arr['current'] = 0; |   $batch_arr['current'] = 0; | ||||||
|  |  | ||||||
|   if ( empty( $batch_arr['progress_message'] ) ) { |   if ( empty( $batch_arr['progress_message'] ) ) { | ||||||
|     $batch_arr['progress_message'] = __('Completed %current% of %total%.'); |     $batch_arr['progress_message'] = __( 'Completed %current% of %total%.' ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   $wpdb->insert( |   set_transient( 'batch_' . $id, $batch_arr , WEEK_IN_SECONDS ); | ||||||
|     $wpdb->prefix . 'batch_operations', |   $location = get_admin_url( null, 'tools.php' ) . "?page=batch-operations&id=" . $id; | ||||||
|     array( |  | ||||||
|       'operations' => serialize( $batch_arr ) |  | ||||||
|     ), |  | ||||||
|     array( |  | ||||||
|       '%s' |  | ||||||
|     ) |  | ||||||
|   ); |  | ||||||
|  |  | ||||||
|   $location = get_admin_url(null, 'tools.php') . "?page=batch-operations&id=" . $wpdb->insert_id; |  | ||||||
|  |  | ||||||
|   if ( ! headers_sent() ) { |   if ( ! headers_sent() ) { | ||||||
|     wp_redirect( $location ); |     wp_redirect( $location ); | ||||||
|   | |||||||
		Ссылка в новой задаче
	
	Block a user