Skip to content

Commit e7079af

Browse files
authored
Merge pull request #55 from woocommerce/enhancement/add-ui-support
Add UI support for generating products and orders.
2 parents cb90963 + 41dfb74 commit e7079af

File tree

3 files changed

+54
-48
lines changed

3 files changed

+54
-48
lines changed

includes/Admin/Settings.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@ public static function render_admin_page() {
4949
<h2>Generate Orders</h2>
5050
<p>
5151
<input type="number" name="num_orders_to_generate" value="<?php echo esc_attr( self::DEFAULT_NUM_ORDERS ); ?>" min="1" />
52-
Number of orders to generate over
53-
<input type="number" name="order_generation_interval" value="<?php echo esc_attr( self::DEFAULT_ORDER_INTERVAL_MINUTES ); ?>" min="0" />
54-
minutes.
52+
Number of orders to generate.
5553
</p>
5654
<?php submit_button( 'Generate', 'primary', 'generate_orders' ); ?>
55+
56+
<h2>Cancel all scheduled generations</h2>
57+
<p>
58+
</p>
59+
<?php submit_button( 'Cancel all', 'primary', 'cancel_all_generations' ); ?>
5760
</form>
5861
<?php
5962
}
@@ -65,14 +68,16 @@ public static function process_page_submit() {
6568
if ( ! empty( $_POST['generate_products'] ) && ! empty( $_POST['num_products_to_generate'] ) ) {
6669
check_admin_referer( 'generate', 'smoothgenerator_nonce' );
6770
$num_to_generate = absint( $_POST['num_products_to_generate'] );
68-
// @todo kick off generation here
71+
wc_smooth_generate_schedule( 'product', $num_to_generate );
6972
add_action( 'admin_notices', array( __CLASS__, 'product_generating_notice' ) );
70-
} else if ( ! empty( $_POST['generate_orders'] ) && ! empty( $_POST['num_orders_to_generate'] ) && ! empty( $_POST['order_generation_interval'] ) ) {
73+
} else if ( ! empty( $_POST['generate_orders'] ) && ! empty( $_POST['num_orders_to_generate'] ) ) {
7174
check_admin_referer( 'generate', 'smoothgenerator_nonce' );
7275
$num_to_generate = absint( $_POST['num_orders_to_generate'] );
73-
$order_generation_interval = absint( $_POST['order_generation_interval'] );
74-
// @todo kick off generation here
76+
wc_smooth_generate_schedule( 'order', $num_to_generate );
7577
add_action( 'admin_notices', array( __CLASS__, 'order_generating_notice' ) );
78+
} else if ( ! empty( $_POST['cancel_all_generations'] ) ) {
79+
check_admin_referer( 'generate', 'smoothgenerator_nonce' );
80+
wc_smooth_generate_cancel_all();
7681
}
7782
}
7883

includes/GenerateBackgroundProcess.php

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,51 @@
55
* @package SmoothGenerator\Classes
66
*/
77

8-
namespace WC\SmoothGenerator;
9-
10-
defined( 'ABSPATH' ) || exit;
11-
12-
use WP_Background_Process;
8+
use WC\SmoothGenerator\Generator;
139

1410
/**
15-
* Background data generation and creation class.
11+
* Calls generator for object type.
12+
*
13+
* @param string $type Type of object to generate.
14+
*
15+
* @return false If task was successful.
1616
*/
17-
class GenerateBackgroundProcess extends WP_Background_Process {
18-
19-
/**
20-
* Initiate new background process.
21-
*/
22-
public function __construct() {
23-
$this->prefix = 'wp_' . get_current_blog_id();
24-
$this->action = 'wc_smoothgenerator_generate';
25-
parent::__construct();
17+
function wc_smooth_generate_object( $type ) {
18+
// Check what generation task to perform.
19+
switch ( $type ) {
20+
case 'order':
21+
Generator\Order::generate();
22+
break;
23+
case 'product':
24+
Generator\Product::generate();
25+
break;
26+
case 'customer':
27+
Generator\Customer::generate();
28+
break;
29+
default:
30+
return false;
2631
}
2732

28-
/**
29-
* Code to execute for each item in the queue
30-
*
31-
* @param array $item Item data.
32-
* @return boolean
33-
*/
34-
protected function task( $item ) {
35-
if ( ! is_array( $item ) && ! isset( $item['task'] ) ) {
36-
return false;
37-
}
33+
return false;
34+
}
3835

39-
// Check what generation task to perform.
40-
switch ( $item['task'] ) {
41-
case 'order':
42-
Generator\Order::generate();
43-
break;
44-
case 'product':
45-
Generator\Product::generate();
46-
break;
47-
case 'customer':
48-
Generator\Customer::generate();
49-
break;
50-
default:
51-
return false;
52-
}
36+
add_action( 'wc_smooth_generate_object', 'wc_smooth_generate_object' );
5337

54-
return false;
38+
/**
39+
* Schedule async actions for generation of objects.
40+
*
41+
* @param string $type Type of object to generate.
42+
* @param int $qty Quantity of objects.
43+
*/
44+
function wc_smooth_generate_schedule( $type, $qty ) {
45+
for ( $i = 0; $i < $qty; $i++ ) {
46+
as_enqueue_async_action( 'wc_smooth_generate_object', array( 'type' => $type ), 'wc_smooth_generate_object_group' );
5547
}
5648
}
49+
50+
/**
51+
* Cancel any scheduled generation actions.
52+
*/
53+
function wc_smooth_generate_cancel_all() {
54+
as_unschedule_all_actions( '', array(), 'wc_smooth_generate_object_group' );
55+
}

wc-smooth-generator.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212

1313
defined( 'ABSPATH' ) || exit;
1414

15+
require_once __DIR__ . '/includes/GenerateBackgroundProcess.php';
16+
1517
// autoloader.
16-
if( ! class_exists( \WC\SmoothGenerator\Plugin::class ) ){
18+
if ( ! class_exists( \WC\SmoothGenerator\Plugin::class ) ) {
1719
require __DIR__ . '/vendor/autoload.php';
1820
}
1921

0 commit comments

Comments
 (0)