File "bulk.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/woo-bulk-editor/ext/bulk/bulk.php
File size: 48.71 KB
MIME-type: text/x-php
Charset: utf-8
<?php
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
}
final class WOOBE_BULK extends WOOBE_EXT {
protected $slug = 'bulk'; //unique
public $text_keys = array();
public $num_keys = array();
public $other_keys = array();
public function __construct() {
$this->init_bulk_keys();
add_action('woobe_ext_scripts', array($this, 'woobe_ext_scripts'), 1);
add_action('woobe_tools_panel_buttons_end', array($this, 'woobe_tools_panel_buttons_end'), 1);
//ajax
add_action('wp_ajax_woobe_bulk_products_count', array($this, 'woobe_bulk_products_count'), 1);
add_action('wp_ajax_woobe_bulk_products', array($this, 'woobe_bulk_products'), 1);
add_action('wp_ajax_woobe_bulk_finish', array($this, 'woobe_bulk_finish'), 1);
add_action('wp_ajax_woobe_bulk_draw_gallery_btn', array($this, 'woobe_bulk_draw_gallery_btn'), 1);
add_action('wp_ajax_woobe_bulk_draw_download_files_btn', array($this, 'woobe_bulk_draw_download_files_btn'), 1);
add_action('wp_ajax_woobe_bulk_draw_cross_sells_btn', array($this, 'woobe_bulk_draw_cross_sells_btn'), 1);
add_action('wp_ajax_woobe_bulk_draw_upsell_ids_btn', array($this, 'woobe_bulk_draw_upsell_ids_btn'), 1);
add_action('wp_ajax_woobe_bulk_draw_grouped_ids_btn', array($this, 'woobe_bulk_draw_grouped_ids_btn'), 1);
add_action('wp_ajax_woobe_bulk_get_att_terms', array($this, 'woobe_bulk_get_att_terms'), 1);
add_action('wp_ajax_woobe_bulk_delete_products_count', array($this, 'woobe_bulk_delete_products_count'), 1);
add_action('wp_ajax_woobe_bulk_delete_products', array($this, 'woobe_bulk_delete_products'), 1);
add_action('woobe_bulk_going', array($this, 'woobe_bulk_going'), 10, 2);
//tabs
$this->add_tab($this->slug, 'top_panel', esc_html__('Bulk Edit', 'woo-bulk-editor'), 'pencil');
add_action('woobe_ext_top_panel_' . $this->slug, array($this, 'woobe_ext_panel'), 1);
}
public function woobe_ext_scripts() {
wp_enqueue_script('woobe_ext_' . $this->slug, $this->get_ext_link() . 'assets/js/' . $this->slug . '.js', array(), WOOBE_VERSION);
wp_enqueue_style('woobe_ext_' . $this->slug, $this->get_ext_link() . 'assets/css/' . $this->slug . '.css', array(), WOOBE_VERSION);
?>
<script>
lang.<?php echo $this->slug ?> = {};
lang.<?php echo $this->slug ?>.want_to_bulk = "<?php echo esc_html__('Will be edited next:', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.want_to_delete = "<?php echo esc_html__('Sure? Delete products?', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.deleting = "<?php echo esc_html__('Bulk deleting', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.deleted = "<?php echo esc_html__('Product(s) deleted!', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.bulking = "<?php echo esc_html__('Bulk editing', 'woo-bulk-editor') ?> ...";
lang.<?php echo $this->slug ?>.bulked = "<?php echo esc_html__('Product(s) edited! Table redrawing ...', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.bulked2 = "<?php echo esc_html__('Product(s) edited!', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.bulk_is_going = "<?php echo esc_html__('ATTENTION: Bulk operation is going!', 'woo-bulk-editor') ?>";
lang.<?php echo $this->slug ?>.attention_all_products = "<?php echo esc_html__('ATTENTION: You have not applied a filter and have not selected any products. This operation will be applied to all products in your database.', 'woo-bulk-editor') ?>";
</script>
<?php
}
public function woobe_tools_panel_buttons_end() {
global $WOOBE;
?>
| <span>
<?php echo WOOBE_HELPER::draw_advanced_switcher(0, 'woobe_bind_editing', '', array('true' => esc_html__('binded editing', 'woo-bulk-editor'), 'false' => esc_html__('binded editing', 'woo-bulk-editor')), array('true' => 1, 'false' => 0), 'js_check_woobe_bind_editing', 'woobe_bind_editing'); ?>
<?php
$bind_tooltip = '';
if ($WOOBE->show_notes) {
$fields = $WOOBE->settings->get_fields();
if (!empty($fields)) {
$bind_tooltip = [];
foreach ($fields as $field_key => $f) {
if ($f['direct']) {
$t = strip_tags($f['title']);
if (!empty($t) AND $field_key != 'ID') {
$bind_tooltip[] = $t;
}
}
}
$bind_tooltip = sprintf(esc_html__('In FREE version of the plugin you can change only next fields: %s', 'woo-bulk-editor'), implode(', ', $bind_tooltip));
}
}
?>
<?php echo WOOBE_HELPER::draw_tooltip(esc_html__('In this mode to the all selected products will be set the value of a product field which been edited', 'woo-bulk-editor') . '. ' . $bind_tooltip) ?>
</span>
<?php
}
public function woobe_ext_panel() {
$data = array();
$data['shop_manager_visibility'] = $this->settings->get_shop_manager_visibility();
$data['text_keys'] = $this->text_keys;
$data['num_keys'] = $this->num_keys;
$data['other_keys'] = $this->other_keys;
$data['settings_fields'] = $this->settings->get_fields();
echo WOOBE_HELPER::render_html($this->get_ext_path() . 'views/panel.php', $data);
}
//ajax
public function woobe_bulk_products_count() {
if (!current_user_can('manage_woocommerce')) {
die('0');
}
if (!isset($_REQUEST['bulk_form_nonce']) || !wp_verify_nonce($_REQUEST['bulk_form_nonce'], 'woobe_bulk_form_nonce')) {
die('0');
}
//***
$bulk_data = array();
if (!isset($_REQUEST['woobe_bind_editing'])) {
parse_str($_REQUEST['bulk_data'], $bulk_data);
$bulk_data = WOOBE_HELPER::sanitize_array($bulk_data);
} else {
//binded editing operation works
if (is_array($_REQUEST['val'])) {
$value = WOOBE_HELPER::sanitize_array($_REQUEST['val']);
} else {
$value = wp_kses($_REQUEST['val'], wp_kses_allowed_html('post'));
$value = str_replace("&", "&", $value);
}
$field_key = sanitize_text_field($_REQUEST['field']);
//***
$bulk_data['woobe_bulk'] = array(
'is' => array(
$field_key => 1
),
$field_key => array(
'value' => $value,
'behavior' => sanitize_text_field($_REQUEST['behavior'])
)
);
}
$this->storage->set_val('woobe_bulk_' . WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']), $bulk_data['woobe_bulk']);
if (!isset($_REQUEST['no_filter'])) {
//get count of filtered - doesn work if bulk for checked products
$products = $this->products->gets(array(
'fields' => 'ids',
'no_found_rows' => true
));
echo json_encode($products->posts);
}
//***
do_action('woobe_bulk_started', WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']));
exit;
}
public function woobe_bulk_delete_products_count() {
if (!current_user_can('manage_woocommerce')) {
die('0');
}
if (!isset($_REQUEST['bulk_form_nonce']) || !wp_verify_nonce($_REQUEST['bulk_form_nonce'], 'woobe_bulk_form_nonce')) {
die('0');
}
$bulk_data = array();
if (!isset($_REQUEST['woobe_bind_editing'])) {
parse_str($_REQUEST['bulk_data'], $bulk_data);
$bulk_data = WOOBE_HELPER::sanitize_array($bulk_data);
} else {
//binded editing operation works
if (is_array($_REQUEST['val'])) {
$value = WOOBE_HELPER::sanitize_array($_REQUEST['val']);
} else {
$value = wp_kses($_REQUEST['val'], wp_kses_allowed_html('post'));
}
$field_key = sanitize_text_field($_REQUEST['field']);
//***
$bulk_data['woobe_bulk'] = array(
'is' => array(
$field_key => 1
),
$field_key => array(
'value' => $value,
'behavior' => sanitize_text_field($_REQUEST['behavior'])
)
);
}
$this->storage->set_val('woobe_bulk_' . WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']), $bulk_data['woobe_bulk']);
if (!isset($_REQUEST['no_filter'])) {
//get count of filtered - doesn work if bulk for checked products
$products = $this->products->gets(array(
'fields' => 'ids',
'no_found_rows' => true
));
echo json_encode($products->posts);
}
exit;
}
public function woobe_bulk_delete_products() {
if (!current_user_can('manage_woocommerce')) {
die('0');
}
if (!isset($_REQUEST['products_ids'])) {
die('0');
}
if (!isset($_REQUEST['bulk_form_nonce']) || !wp_verify_nonce($_REQUEST['bulk_form_nonce'], 'woobe_bulk_form_nonce')) {
die('0');
}
if (is_array($_REQUEST['products_ids'])) {
$is_variations_solo = intval($_REQUEST['woobe_show_variations']);
$products_ids = array_map(function ($item) {
return intval($item); //sanitize intval
}, $_REQUEST['products_ids']);
//as we want to change variations only but have ids of parents - lets get variations ids
if ($is_variations_solo AND!empty($products_ids)) {
$vars_ids = array();
foreach ($products_ids as $product_id) {
$product = $this->products->get_product($product_id);
if ($product->is_type('variable')) {
$children = $product->get_children();
if (!empty($children)) {
$vars_ids = array_merge($vars_ids, $children);
}
}
}
$products_ids = array_unique(array_merge($products_ids, $vars_ids));
}
$woobe_bulk = $this->storage->get_val('woobe_bulk_' . WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']));
foreach ($products_ids as $id) {
if ($is_variations_solo) {
//lets check that currenct variation has the same attributes combination
if (isset($woobe_bulk['combination_attributes']) AND!empty($woobe_bulk['combination_attributes'])) {
$variation = $this->products->get_product($id);
$attributes = $variation->get_attributes();
//***
$go = FALSE;
//***
if (!empty($attributes)) {
foreach ($woobe_bulk['combination_attributes'] as $comb) {
//lets look is $attributes the same set of attributes as in $comb
$ak_att = array_keys($attributes);
$ak_cv = array_keys($comb);
//fix for non-latin symbols
if (!empty($ak_att)) {
$ak_att = array_map('urldecode', $ak_att);
}
//fix for non-latin symbols
if (!empty($ak_cv)) {
$ak_cv = array_map('urldecode', $ak_cv);
}
sort($ak_att);
sort($ak_cv);
if ($ak_att === $ak_cv) {
$new_attributes = $attributes;
$new_comb = $comb;
if (in_array('-1',$comb)){
$delete_keys = array_keys($comb, '-1',);
foreach ($delete_keys as $d_key) {
if (isset($new_attributes[$d_key])) {
unset($new_attributes[$d_key]);
unset($new_comb[$d_key]);
}
}
}
$av_att = array_values($new_attributes);
$av_cv = array_values($new_comb);
//fix for non-latin symbols
if (!empty($ak_att)) {
$av_att = array_map('urldecode', $av_att);
}
if (!empty($av_cv)) {
$av_cv = array_map('urldecode', $av_cv);
}
sort($av_att);
sort($av_cv);
if ($av_att === $av_cv) {
$go = TRUE;
break;
}
}
}
}
//***
if (!$go) {
continue;
}
}
}
//wp_delete_post($id,false);
wp_trash_post(intval($id));
}
} else {
die('0');
}
die(json_encode($_REQUEST['products_ids']));
exit;
}
//ajax
public function woobe_bulk_products() {
if (!current_user_can('manage_woocommerce')) {
die('0');
}
if (!isset($_REQUEST['products_ids'])) {
die('0');
}
if (!isset($_REQUEST['bulk_form_nonce']) || !wp_verify_nonce($_REQUEST['bulk_form_nonce'], 'woobe_bulk_form_nonce')) {
die('0');
}
//***
$fields = $this->settings->get_fields();
$woobe_bulk = $this->storage->get_val('woobe_bulk_' . WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']));
//key for history bulk opearation, not related to products keys
$_REQUEST['woobe_bulk_key'] = WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']);
$is_variations_solo = intval($_REQUEST['woobe_show_variations']);
$products_ids = $_REQUEST['products_ids']; //sanitize in cycle below
//***
//as we want to change variations only but have ids of parents - lets get variations ids
if ($is_variations_solo AND!empty($products_ids)) {
$vars_ids = array();
foreach ($products_ids as $product_id) {
$product_id = intval($product_id); //sanitize
$product = $this->products->get_product($product_id);
if ($product->is_type('variable')) {
$children = $product->get_children();
if (!empty($children)) {
$vars_ids = array_merge($vars_ids, $children);
}
}
}
$products_ids = array_unique(array_merge($products_ids, $vars_ids));
}
//***
if (isset($woobe_bulk['is']) AND!empty($woobe_bulk['is']) AND!empty($products_ids)) {
//***
foreach ($woobe_bulk['is'] as $field_key => $is) {
if ($fields[$field_key]['edit_view'] === 'calendar') {
if (!is_int($woobe_bulk[$field_key]['value']) AND (isset($fields[$field_key]["field_type"]) AND $fields[$field_key]["field_type"] == "meta")) {
$woobe_bulk[$field_key]['value'] = strtotime($woobe_bulk[$field_key]['value']); // - wrong way
} else {
$woobe_bulk[$field_key]['value'] = $this->products->normalize_calendar_date($woobe_bulk[$field_key]['value'], $field_key);
}
}
//***
//speedfix
wp_defer_term_counting(false);
wp_defer_comment_counting(true);
//***
if (intval($is) === 1) {
foreach ($products_ids as $product_id) {
if ($is_variations_solo) {
//if enabled editing of variations only parent-products are ignored
$product = $this->products->get_product($product_id);
if (!$product->is_type('variation')) {
continue;
}
//lets check that currenct variation has the same attributes combination
if (isset($woobe_bulk['combination_attributes']) AND!empty($woobe_bulk['combination_attributes'])) {
$variation = $this->products->get_product($product_id);
$attributes = $variation->get_attributes();
//***
$go = FALSE;
//***
if (!empty($attributes)) {
foreach ($woobe_bulk['combination_attributes'] as $comb) {
//lets look is $attributes the same set of attributes as in $comb
$ak_att = array_keys($attributes);
$ak_cv = array_keys($comb);
//fix for non-latin symbols
if (!empty($ak_att)) {
$ak_att = array_map('urldecode', $ak_att);
}
//fix for non-latin symbols
if (!empty($ak_cv)) {
$ak_cv = array_map('urldecode', $ak_cv);
}
sort($ak_att);
sort($ak_cv);
if ($ak_att === $ak_cv) {
$new_attributes = $attributes;
$new_comb = $comb;
if (in_array('-1',$comb)){
$delete_keys = array_keys($comb, '-1',);
foreach ($delete_keys as $d_key) {
if (isset($new_attributes[$d_key])) {
unset($new_attributes[$d_key]);
unset($new_comb[$d_key]);
}
}
}
$av_att = array_values($new_attributes);
$av_cv = array_values($new_comb);
//fix for non-latin symbols
if (!empty($ak_att)) {
$av_att = array_map('urldecode', $av_att);
}
if (!empty($av_cv)) {
$av_cv = array_map('urldecode', $av_cv);
}
sort($av_att);
sort($av_cv);
if ($av_att === $av_cv) {
$go = TRUE;
break;
}
}
}
}
//***
if (!$go) {
continue;
}
}
}
//***
switch ($field_key) {
case 'post_title':
case 'post_content':
case 'post_excerpt':
case 'post_name':
case 'purchase_note':
case 'sku':
case 'tax_class':
case 'backorders':
case 'sold_individually':
case 'reviews_allowed':
case 'product_url':
case 'button_text':
$this->_process_text_data($woobe_bulk, $field_key, $product_id);
break;
case 'post_status':
case 'stock_status':
case 'manage_stock':
case 'tax_status':
case 'catalog_visibility':
case 'product_type':
case 'featured':
case 'virtual':
case 'downloadable':
case 'download_files':
case 'gallery':
case 'upsell_ids':
case 'cross_sell_ids':
case 'grouped_ids':
case 'post_date':
if (intval($woobe_bulk[$field_key]['value']) !== -1) {
$this->products->update_page_field($product_id, $field_key, $woobe_bulk[$field_key]['value']);
}
break;
case 'attribute_visibility':
if (!isset($woobe_bulk[$field_key]['value']) OR!is_array($woobe_bulk[$field_key]['value'])) {
$woobe_bulk[$field_key]['value'] = array();
}
if (!isset($woobe_bulk[$field_key]['visible'])) {
$woobe_bulk[$field_key]['visible'] = 1;
}
$this->products->set_product_attributes_visible($product_id, $woobe_bulk[$field_key]['value'], $woobe_bulk[$field_key]['visible']);
break;
case 'regular_price':
case 'sale_price':
case 'stock_quantity':
case 'download_expiry':
case 'download_limit':
case 'date_on_sale_from':
case 'date_on_sale_to':
case 'weight':
case 'length':
case 'width':
case 'height':
case 'product_shipping_class':
case 'menu_order':
case 'post_author':
case 'total_sales':
case 'review_count':
case 'average_rating':
$this->_process_number_data($woobe_bulk, $field_key, $product_id);
break;
default:
break;
}
//***
if (isset($fields[$field_key]) AND $fields[$field_key]['field_type'] === 'taxonomy') {
//if (!empty($woobe_bulk[$field_key]['value'])) {
do_action('woobe_before_update_page_field', $field_key, $product_id, 0); //for the History
if (!isset($woobe_bulk[$field_key]['behavior'])) {
$woobe_bulk[$field_key]['behavior'] = "";
}
switch ($woobe_bulk[$field_key]['behavior']) {
case 'append':
if (is_taxonomy_hierarchical($field_key)) {
wp_set_post_terms($product_id, $woobe_bulk[$field_key]['value'], $field_key, true);
} else {
//product_tag for example
foreach ($woobe_bulk[$field_key]['value'] as $term_id) {
$t = get_term_by('id', $term_id, $field_key);
wp_set_post_terms($product_id, $t->slug, $field_key, true);
}
}
break;
case 'replace':
case 'new':
if (is_taxonomy_hierarchical($field_key)) {
wp_set_post_terms($product_id, $woobe_bulk[$field_key]['value'], $field_key, false);
} else {
//product_tag for example
$append = false; //clean previous by first one then append
if (!empty($woobe_bulk[$field_key]['value']) AND is_array($woobe_bulk[$field_key]['value'])) {
foreach ($woobe_bulk[$field_key]['value'] as $term_id) {
$t = get_term_by('id', $term_id, $field_key);
wp_set_post_terms($product_id, $t->slug, $field_key, $append);
$append = true;
}
}
}
break;
case 'remove':
foreach ($woobe_bulk[$field_key]['value'] as $term_id) {
$t = get_term_by('id', $term_id, $field_key);
wp_remove_object_terms($product_id, $t->slug, $field_key);
}
break;
}
//}
}
//***
if (isset($fields[$field_key]) AND $fields[$field_key]['field_type'] === 'attribute') {
if (!isset($woobe_bulk[$field_key]['value'])) {
$woobe_bulk[$field_key]['value'] = '';
}
do_action('woobe_before_update_page_field', $field_key, $product_id, 0); //for the History
$this->products->set_product_attributes($product_id, $field_key, $woobe_bulk[$field_key]['value'], $woobe_bulk[$field_key]['behavior']);
}
//***
if (isset($fields[$field_key]) AND $fields[$field_key]['field_type'] === 'meta') {
switch ($fields[$field_key]['type']) {
case 'string':
//if data is serialized in ine string
if ($fields[$field_key]['edit_view'] == 'meta_popup_editor') {
if (!is_array($woobe_bulk[$field_key]['value'])) {
//if not else parsed
parse_str($woobe_bulk[$field_key]['value'], $meta_val);
$woobe_bulk[$field_key]['value'] = $this->products->process_jsoned_meta_data($meta_val);
}
}
//***
if ($fields[$field_key]['edit_view'] == 'gallery_popup_editor') {
if (!is_array($woobe_bulk[$field_key]['value'])) {
//if not else parsed
parse_str($woobe_bulk[$field_key]['value'], $meta_val);
if (!empty($meta_val['woobe_gallery_images'])) {
$woobe_bulk[$field_key]['value'] = $meta_val;
}
}
}
//***
if ($fields[$field_key]['edit_view'] !== 'switcher') {
$this->_process_text_data($woobe_bulk, $field_key, $product_id);
} else {
if (intval($woobe_bulk[$field_key]['value']) !== -1) {
$this->products->update_page_field($product_id, $field_key, intval($woobe_bulk[$field_key]['value']));
}
}
break;
case 'number':
$this->_process_number_data($woobe_bulk, $field_key, $product_id);
break;
default:
break;
}
}
}
}
}
do_action('woobe_bulk_going', sanitize_text_field($_REQUEST['woobe_bulk_key']), count($products_ids));
}
die('done');
}
public function woobe_bulk_going($bulk_key, $products_count) {
$count_key = 'woobe_bulk_' . strtolower($bulk_key) . '_count';
$count_now = intval($this->storage->get_val($count_key));
$this->storage->set_val($count_key, $products_count + $count_now);
}
private function _process_text_data($woobe_bulk, $field_key, $product_id) {
//if (!empty($woobe_bulk[$field_key]['value'])) {
$val = $this->products->get_post_field($product_id, $field_key);
$woobe_bulk[$field_key]['value'] = $this->products->string_macros($woobe_bulk[$field_key]['value'], $field_key, $product_id);
switch ($woobe_bulk[$field_key]['behavior']) {
case 'append':
$val = $this->products->string_replacer($val . $woobe_bulk[$field_key]['value'], $product_id);
break;
case 'prepend':
$val = $this->products->string_replacer($woobe_bulk[$field_key]['value'] . $val, $product_id);
break;
case 'new':
$val = $this->products->string_replacer($woobe_bulk[$field_key]['value'], $product_id);
break;
case 'replace':
$replace_to = $this->products->string_replacer($woobe_bulk[$field_key]['replace_to'], $product_id);
$replace_from = $this->products->string_replacer($woobe_bulk[$field_key]['value'], $product_id);
//fix for apostrophe
$replace_from = str_replace("\'", "'", $replace_from);
if ($woobe_bulk[$field_key]['case'] == 'ignore') {
$val = str_ireplace($replace_from, $replace_to, $val);
} else {
$val = str_replace($replace_from, $replace_to, $val);
/*
* https://stackoverflow.com/questions/19317493/php-preg-replace-case-insensitive-match-with-case-sensitive-replacement
$val = preg_replace_callback('/\b' . $replace_from . '\b/i', function($matches) use ($replace_to) {
$i = 0;
return join('', array_map(function($char) use ($matches, &$i) {
return ctype_lower($matches[0][$i++]) ? strtolower($char) : strtoupper($char);
}, str_split($replace_to)));
}, $val);
*
*/
}
break;
}
//***
$empty_exceptions = array('tax_class'); //setting empty values is possible with this fields
$can = true; //!empty($val);
if (in_array($field_key, $empty_exceptions)) {
$can = true;
}
if ($can) {
$val = $this->products->update_page_field($product_id, $field_key, $val);
}
//}
}
private function _process_number_data($woobe_bulk, $field_key, $product_id) {
if ($woobe_bulk[$field_key]['behavior'] != 'new') {
$val = floatval($this->products->get_post_field($product_id, $field_key));
}
//***
switch ($woobe_bulk[$field_key]['behavior']) {
case 'new':
$val = floatval($woobe_bulk[$field_key]['value']);
break;
case 'invalue':
$val += floatval($woobe_bulk[$field_key]['value']);
break;
case 'devalue':
$val -= floatval($woobe_bulk[$field_key]['value']);
break;
case 'inpercent':
$val = $val + $val * floatval($woobe_bulk[$field_key]['value']) / 100;
break;
case 'depercent':
$val = $val - $val * floatval($woobe_bulk[$field_key]['value']) / 100;
break;
case 'devalue_regular_price':
//for sale_price only
$val = floatval($this->products->get_post_field($product_id, 'regular_price')) - floatval($woobe_bulk[$field_key]['value']);
break;
case 'depercent_regular_price':
//for sale_price only
$val = floatval($this->products->get_post_field($product_id, 'regular_price'));
$val = $val - $val * floatval($woobe_bulk[$field_key]['value']) / 100;
break;
case 'invalue_sale_price':
//for regular_price only
$val = floatval($this->products->get_post_field($product_id, 'sale_price') + floatval($woobe_bulk[$field_key]['value']));
break;
case 'inpercent_sale_price':
//for regular_price only
$val = floatval($this->products->get_post_field($product_id, 'sale_price'));
$val = $val + $val * floatval($woobe_bulk[$field_key]['value']) / 100;
break;
}
if (isset($_REQUEST['num_formula_action']) AND isset($_REQUEST['num_formula_value']) AND $_REQUEST['num_formula_value'] != '-1') {
$v_key = esc_textarea($_REQUEST['num_formula_value']);
$action = esc_textarea($_REQUEST['num_formula_action']);
$v_data = floatval(get_post_meta($product_id, $v_key, true));
switch ($action) {
case '-':
$val = $val - $v_data;
break;
case '*':
$val = $val * $v_data;
break;
case '/':
if ($v_data == 0) {
$v_data = 1;
}
$val = $val / $v_data;
break;
default:
$val = $val + $v_data;
break;
}
}
if (isset($_REQUEST['num_rand_data']) && is_array($_REQUEST['num_rand_data'])) {
$rand_data = wc_clean($_REQUEST['num_rand_data']);
if (isset($rand_data['from']) && isset($rand_data['to']) && ($rand_data['from'] != $rand_data['to']) && ($rand_data['from'] < $rand_data['to'])) {
$from = (float)$rand_data['from'];
$to = (float)$rand_data['to'];
$decimal = 1;
if (isset($rand_data['decimal'])) {
$decimal = (int)$rand_data['decimal'];
}
$action = '+';
if (isset($rand_data['action'])) {
$action = $rand_data['action'];
}
$rand_val = rand($from * $decimal, $to * $decimal)/$decimal;
switch ($action) {
case '-':
$val = $val - $rand_val;
break;
case '*':
$val = $val * $rand_val;
break;
case '/':
if ($rand_val == 0) {
$rand_val = 1;
}
$val = $val / $rand_val;
break;
default:
$val = $val + $rand_val;
break;
}
}
}
//***
$convert = TRUE;
if ($field_key == 'sale_price') {
//sale price CAN NOT be more OR even equal to the regular price
if ($val >= $this->products->get_post_field($product_id, 'regular_price')) {
$convert = FALSE;
}
//to delete sale price
if ($val <= 0) {
$val = -1;
$val = $this->products->update_page_field($product_id, $field_key, $val);
$convert = FALSE;
}
}
//***
if ($convert) {
$val = $this->products->update_page_field($product_id, $field_key, floatval($val));
}
}
public function woobe_bulk_finish() {
do_action('woobe_bulk_finished', WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']));
$count_key = 'woobe_bulk_' . WOOBE_HELPER::sanitize_bulk_key($_REQUEST['bulk_key']) . '_count';
die($this->storage->get_val($count_key) . '');
}
private function init_bulk_keys() {
$fields = woobe_get_fields();
$this->text_keys = array(
'post_title' => array(
'title' => esc_html__('title', 'woo-bulk-editor'),
'css_classes' => isset($fields['post_title']['css_classes']) ? $fields['post_title']['css_classes'] : ''
),
'post_content' => array(
'title' => esc_html__('description', 'woo-bulk-editor'),
'css_classes' => isset($fields['post_content']['css_classes']) ? $fields['post_content']['css_classes'] : ''
),
'post_excerpt' => array(
'title' => esc_html__('short description', 'woo-bulk-editor'),
'css_classes' => isset($fields['post_excerpt']['css_classes']) ? $fields['post_excerpt']['css_classes'] : ''
),
'post_name' => array(
'title' => esc_html__('product slug', 'woo-bulk-editor'),
'css_classes' => isset($fields['post_name']['css_classes']) ? $fields['post_name']['css_classes'] : ''
),
'sku' => array(
'title' => esc_html__('SKU', 'woo-bulk-editor'),
'css_classes' => isset($fields['sku']['css_classes']) ? $fields['sku']['css_classes'] : ''
)
);
$this->other_keys = array(
'post_status' => array(
'title' => esc_html__('post status', 'woo-bulk-editor'),
'options' => $fields['post_status']['select_options'],
'direct' => $fields['post_status']['direct'],
'css_classes' => isset($fields['post_status']['css_classes']) ? $fields['post_status']['css_classes'] : ''
),
'stock_status' => array(
'title' => esc_html__('stock status', 'woo-bulk-editor'),
'options' => $fields['stock_status']['select_options'],
'direct' => $fields['stock_status']['direct'],
'css_classes' => isset($fields['stock_status']['css_classes']) ? $fields['stock_status']['css_classes'] : ''
),
'tax_status' => array(
'title' => esc_html__('tax status', 'woo-bulk-editor'),
'options' => $fields['tax_status']['select_options'],
'direct' => $fields['tax_status']['direct'],
'css_classes' => isset($fields['tax_status']['css_classes']) ? $fields['tax_status']['css_classes'] : ''
),
'catalog_visibility' => array(
'title' => esc_html__('catalog visibility', 'woo-bulk-editor'),
'options' => $fields['catalog_visibility']['select_options'],
'direct' => $fields['catalog_visibility']['direct'],
'css_classes' => isset($fields['catalog_visibility']['css_classes']) ? $fields['catalog_visibility']['css_classes'] : ''
),
'product_type' => array(
'title' => esc_html__('product type', 'woo-bulk-editor'),
'options' => $fields['product_type']['select_options'],
'direct' => $fields['product_type']['direct'],
'css_classes' => isset($fields['product_type']['css_classes']) ? $fields['product_type']['css_classes'] : ''
),
'featured' => array(
'title' => esc_html__('featured', 'woo-bulk-editor'),
'options' => $fields['featured']['select_options'],
'direct' => $fields['featured']['direct'],
'css_classes' => isset($fields['featured']['css_classes']) ? $fields['featured']['css_classes'] : ''
),
);
//***
$options1 = array(
'invalue' => esc_html__('increase by value', 'woo-bulk-editor'),
'devalue' => esc_html__('decrease by value', 'woo-bulk-editor'),
'inpercent' => esc_html__('increase by %', 'woo-bulk-editor'),
'depercent' => esc_html__('decrease by %', 'woo-bulk-editor'),
'new' => esc_html__('set new', 'woo-bulk-editor')
);
$options2 = array(
'invalue' => esc_html__('increase by value', 'woo-bulk-editor'),
'devalue' => esc_html__('decrease by value', 'woo-bulk-editor'),
'delete' => esc_html__('delete', 'woo-bulk-editor'),
'new' => esc_html__('set new', 'woo-bulk-editor')
);
//***
$this->num_keys = array(
'regular_price' => array(
'title' => esc_html__('regular price', 'woo-bulk-editor'),
'direct' => $fields['regular_price']['direct'],
'options' => array(
'invalue' => esc_html__('increase by value', 'woo-bulk-editor'),
'devalue' => esc_html__('decrease by value', 'woo-bulk-editor'),
'inpercent' => esc_html__('increase by %', 'woo-bulk-editor'),
'depercent' => esc_html__('decrease by %', 'woo-bulk-editor'),
'inpercent_sale_price' => esc_html__('sale price plus %', 'woo-bulk-editor'),
'invalue_sale_price' => esc_html__('sale price plus value', 'woo-bulk-editor'),
'new' => esc_html__('set new', 'woo-bulk-editor')
),
'css_classes' => isset($fields['regular_price']['css_classes']) ? $fields['regular_price']['css_classes'] : ''
),
'sale_price' => array(
'title' => esc_html__('sale price', 'woo-bulk-editor'),
'direct' => $fields['sale_price']['direct'],
'options' => array(
'invalue' => esc_html__('increase by value', 'woo-bulk-editor'),
'devalue' => esc_html__('decrease by value', 'woo-bulk-editor'),
'inpercent' => esc_html__('increase by %', 'woo-bulk-editor'),
'depercent' => esc_html__('decrease by %', 'woo-bulk-editor'),
'depercent_regular_price' => esc_html__('regular price minus %', 'woo-bulk-editor'),
'devalue_regular_price' => esc_html__('regular price minus value', 'woo-bulk-editor'),
'new' => esc_html__('set new', 'woo-bulk-editor')
),
'css_classes' => isset($fields['sale_price']['css_classes']) ? $fields['sale_price']['css_classes'] : ''
),
'stock_quantity' => array(
'title' => esc_html__('in stock quantity', 'woo-bulk-editor'),
'direct' => $fields['stock_quantity']['direct'],
'options' => $options2,
'css_classes' => isset($fields['stock_quantity']['css_classes']) ? $fields['stock_quantity']['css_classes'] : ''
),
'download_expiry' => array(
'title' => esc_html__('download expiry', 'woo-bulk-editor'),
'direct' => $fields['download_expiry']['direct'],
'options' => $options2,
'css_classes' => isset($fields['download_expiry']['css_classes']) ? $fields['download_expiry']['css_classes'] : ''
),
'download_limit' => array(
'title' => esc_html__('download limit', 'woo-bulk-editor'),
'direct' => $fields['download_limit']['direct'],
'options' => $options2,
'css_classes' => isset($fields['download_limit']['css_classes']) ? $fields['download_limit']['css_classes'] : ''
)
);
}
//ajax
public function woobe_bulk_draw_gallery_btn() {
$images = [];
parse_str($_REQUEST['images'], $images); //sanitize below in array_map
$data = array();
$woobe_gallery_images = isset($images['woobe_gallery_images']) ? $images['woobe_gallery_images'] : array();
//sanitizing to intval
$woobe_gallery_images = array_map(function ($item) {
return intval($item); //sanitize intval
}, $woobe_gallery_images);
$data['html'] = WOOBE_HELPER::draw_gallery_popup_editor_btn(sanitize_text_field($_REQUEST['field']), 0, $woobe_gallery_images);
$data['images_ids'] = implode(',', $woobe_gallery_images); //for any case, but now we not need it because updating of products applies by serialized data
die(json_encode($data));
}
//ajax
public function woobe_bulk_draw_download_files_btn() {
$files = [];
parse_str($_REQUEST['files'], $files);
$files = WOOBE_HELPER::sanitize_array($files);
$count = 0;
if (isset($files['_wc_file_names'])) {
$count = count($files['_wc_file_names']);
}
echo WOOBE_HELPER::draw_downloads_popup_editor_btn(sanitize_text_field($_REQUEST['field']), 0, $count);
exit;
}
//ajax
public function woobe_bulk_draw_cross_sells_btn() {
$products = [];
parse_str($_REQUEST['products'], $products);
$ids = array();
if (isset($products['woobe_prod_ids'])) {
$ids = $products['woobe_prod_ids'];
}
$ids = array_map(function ($item) {
return intval($item); //sanitize intval
}, $ids);
echo WOOBE_HELPER::draw_cross_sells_popup_editor_btn(sanitize_text_field($_REQUEST['field']), 0, $ids);
exit;
}
//ajax
public function woobe_bulk_draw_upsell_ids_btn() {
$products = [];
parse_str($_REQUEST['products'], $products);
$ids = array();
if (isset($products['woobe_prod_ids'])) {
$ids = array_map(function ($item) {
return intval($item); //sanitize intval
}, $products['woobe_prod_ids']);
}
echo WOOBE_HELPER::draw_upsells_popup_editor_btn($_REQUEST['field'], 0, $ids);
exit;
}
//ajax
public function woobe_bulk_draw_grouped_ids_btn() {
$products = [];
parse_str($_REQUEST['products'], $products); //sanitize below
$ids = array();
if (isset($products['woobe_prod_ids'])) {
$ids = array_map(function ($item) {
return intval($item); //sanitize intval
}, $products['woobe_prod_ids']);
}
echo WOOBE_HELPER::draw_grouped_popup_editor_btn(sanitize_text_field($_REQUEST['field']), 0, $ids);
exit;
}
//ajax
public function woobe_bulk_get_att_terms() {
$drop_downs = '';
if (!empty($_REQUEST['attributes'])) {
foreach ($_REQUEST['attributes'] as $pa) {
$pa = sanitize_text_field($pa); //sanitize attribute name
$terms = WOOBE_HELPER::get_taxonomies_terms_hierarchy($pa);
if (!empty($terms)) {
$options = array();
$options[''] = esc_html__('not selected', 'woo-bulk-editor');
$options['-1'] = esc_html__('Any', 'woo-bulk-editor');
foreach ($terms as $t) {
$options[$t['slug']] = $t['name'];
}
$drop_downs .= WOOBE_HELPER::draw_select(array(
'field' => 0,
'product_id' => 0,
'class' => '',
'options' => $options,
'name' => 'woobe_bulk[combination_attributes][' . sanitize_text_field($_REQUEST['hash_key']) . '][' . $pa . ']'
));
}
}
}
die($drop_downs);
}
}