diff --git a/bath.php b/bath.php new file mode 100644 index 0000000..9617a50 --- /dev/null +++ b/bath.php @@ -0,0 +1,226 @@ +prefix . 'batch_operations'; + + $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 ); + +} + +/** + * Add backend page without menu item + */ +function batch_operations_add_page() { + add_management_page( 'Batch operations', '', 'edit_posts', 'batch-operations', 'batch_operations_page_view' ); +} + +/** + * View batch operations page + */ +function batch_operations_page_view() { + //WP 3.3 + wp_enqueue_script( 'jquery' ); + wp_enqueue_script( 'batch_operations_script', plugin_dir_url('') . 'batch-operations/js/batch.min.js' ); + wp_enqueue_style( 'batch_operations_script', plugin_dir_url('') . 'batch-operations/css/batch.css' ); + $id = ( intval( $_REQUEST["id"] ) < 0 )? 0 : intval( $_REQUEST["id"] ); + ?> + +
+ * $batch = array(
+ * 'title' => t('Exporting'),
+ * 'operations' => array(
+ * array('my_function_1', array(123, 'qwe')),
+ * array('my_function_2', array()),
+ * ),
+ * 'finished' => 'my_finished_callback',
+ * );
+ *
+ * BatchController::Start($batch);
+ *
+ *
+ *
+ * function my_function_1($id, $text, &$context) {
+ * $context['results'][] = $text . $id;
+ * $context['message'] = 'Text + id ='.$text . $id;
+ * }
+ *
+ * The $context array gathers batch context information about the execution (read),
+ * as well as 'return values' for the current operation (write)
+ * The following keys are provided :
+ * 'results' (read / write): The array of results gathered so far by
+ * the batch processing, for the current operation to append its own.
+ * 'message' (write): A text message displayed in the progress page.
+ * The following keys allow for multi-step operations :
+ * 'sandbox' (read / write): An array that can be freely used to
+ * store persistent data between iterations. It is recommended to
+ * use this instead of $_SESSION, which is unsafe if the user
+ * continues browsing in a separate window while the batch is processing.
+ * 'finished' (write): A float number between 0 and 1 informing
+ * the processing engine of the completion level for the operation.
+ * 1 (or no value explicitly set) means the operation is finished
+ * and the batch processing can continue to the next operation.
+ *
+ *
+ * @param array $batch_arr array operations and more
+ */
+function batch_operations_start($batch_arr)
+{
+ global $wpdb;
+
+ $batch_arr['context'] = array(
+ 'message' => '',
+ 'sandbox' => array(),
+ 'finished' => true,
+ 'results' => array()
+ );
+ $batch_arr['count'] = count( $batch_arr['operations'] );
+ $batch_arr['current'] = 0;
+
+ $wpdb->insert(
+ $wpdb->prefix . 'batch_operations',
+ array(
+ 'operations' => serialize( $batch_arr )
+ ),
+ array(
+ '%s'
+ )
+ );
+
+ $location = get_admin_url(null, 'tools.php') . "?page=batch-operations&id=" . $wpdb->insert_id;
+
+ if ( ! headers_sent() ) {
+ wp_redirect( $location );
+ } else {
+ // if header is set then runs this hack
+ echo '';
+ echo '';
+ }
+ exit(0);
+}
\ No newline at end of file
diff --git a/css/ShortCSS b/css/ShortCSS
new file mode 160000
index 0000000..c87f617
--- /dev/null
+++ b/css/ShortCSS
@@ -0,0 +1 @@
+Subproject commit c87f6175bc7af40bce6f62d0ae1855f5149fdaf6
diff --git a/css/batch.css b/css/batch.css
new file mode 100644
index 0000000..8b05534
--- /dev/null
+++ b/css/batch.css
@@ -0,0 +1 @@
+.batch-progress{height:30px;position:relative;background:#fff;-webkit-border-radius:8px;-moz-border-radius:8px;-o-border-radius:8px;-ms-border-radius:8px;-khtml-border-radius:8px;border-radius:8px;border:1px solid #ccc;margin:10px 0;padding:2px}.batch-progress>span{display:block;height:100%;background-color:#1834ff;background-image:-moz-linear-gradient(#4d80ff,#002ffb);background-image:-webkit-linear-gradient(#4d80ff,#002ffb);background-image:-o-linear-gradient(#4d80ff,#002ffb);background-image:-ms-linear-gradient(#4d80ff,#002ffb);background-image:linear-gradient(#4d80ff,#002ffb);-webkit-border-radius:6px;-moz-border-radius:6px;-o-border-radius:6px;-ms-border-radius:6px;-khtml-border-radius:6px;border-radius:6px;position:relative;overflow:hidden}
\ No newline at end of file
diff --git a/css/batch.styl b/css/batch.styl
new file mode 100644
index 0000000..27f5c66
--- /dev/null
+++ b/css/batch.styl
@@ -0,0 +1,19 @@
+@import "ShortCSS/ShortCSS"
+
+.batch-progress
+ -h 30px
+ -pos relative
+ -bg #fff
+ b-radius 8px
+ -br 1px solid #ccc
+ -m 10px 0
+ -p 2px
+ & > span
+ -d block
+ -h 100%
+ -bgc #1834ff
+ l-gradient #4d80ff, #002ffb
+ b-radius 6px
+ -pos relative
+ overflow hidden
+
diff --git a/js/batch.js b/js/batch.js
new file mode 100644
index 0000000..0a6fdf2
--- /dev/null
+++ b/js/batch.js
@@ -0,0 +1,32 @@
+jQuery(document).ready(function($) {
+ var batch_progress = function (percent){
+ return $(".batch-progress > span").animate({ width: percent + "%" }, 600);
+ };
+
+ function batch_process(){
+ $.post(
+ ajaxurl+'?action=batch_operations&id='+batch_id,
+ function(data){
+ if (data['do']=='finish')
+ {
+
+ batch_progress(data['percent']);
+ $('.batch-message').html(data['message']).delay(1500).queue(function () {
+ $(location).attr('href',successful_page);
+ $(this).dequeue();
+ }
+ );
+ }
+ else
+ {
+ $('.batch-message').html(data['message']);
+ batch_progress(data['percent']);
+ batch_process()
+ }
+ }
+ );
+ }
+
+ batch_process();
+
+});
\ No newline at end of file
diff --git a/js/batch.min.js b/js/batch.min.js
new file mode 100644
index 0000000..5abfcd4
--- /dev/null
+++ b/js/batch.min.js
@@ -0,0 +1 @@
+jQuery(document).ready(function(a){function b(){a.post(ajaxurl+"?action=batch_operations&id="+batch_id,function(d){"finish"==d["do"]?(c(d.percent),a(".batch-message").html(d.message).delay(1500).queue(function(){a(location).attr("href",successful_page),a(this).dequeue()})):(a(".batch-message").html(d.message),c(d.percent),b())})}var c=function(b){return a(".batch-progress > span").animate({width:b+"%"},600)};b()});
\ No newline at end of file
diff --git a/readme.txt b/readme.txt
index 5977b2b..39ff491 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,5 @@
=== Batch operations ===
-Contributors: Igor V Belousov
+Contributors: igor-v-belousov
Tags: batch
Requires at least: 3.3
Tested up to: 3.3