<?php
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
}
//CRUD - filters sets profiles
class WOOBE_FILTER_PROFILES extends WOOBE_PROFILES {
protected $option_key = 'woobe_filter_profiles_';
protected $non_deletable_profiles = [];
protected $create_profile_ajax_action = 'woobe_create_filter_profile';
protected $load_profile_ajax_action = 'woobe_load_filter_profile';
protected $delete_profile_ajax_action = 'woobe_delete_filter_profile';
public function __construct($settings) {
parent::__construct(new WOOBE_SETTINGS());
add_action('wp_ajax_woobe_get_filter_profile_data', array($this, 'get_filter_profile_data'), 1);
add_action('wp_ajax_woobe_fprofile_saved_cencel', array($this, 'fprofile_saved_cencel'), 1);
}
protected function init_constructor_data() {
//$this->update(array());//for tests
if (!$this->get()) {
//lets create default profile after first plugin init after its intstallation
$this->create(array(
'product_type' => 'variable'
), esc_html__('Variable products', 'woo-bulk-editor'), 'default');
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//ajax
public function load_profile() {
if (!current_user_can('manage_woocommerce')) {
die('0');
}
if (!isset($_REQUEST['tools_panel_nonce']) || !wp_verify_nonce($_REQUEST['tools_panel_nonce'], 'woobe_tools_panel_nonce')) {
die('0');
}
//die('1');//for tests
$profile_key=sanitize_text_field($_REQUEST['profile_key']);
$profile = $this->get($profile_key);
if (isset($_REQUEST['saved_fprofile']) AND boolval($_REQUEST['saved_fprofile'])) {
update_user_meta(get_current_user_id(), "woobe_fprofile_saved", $profile_key);
} else {
update_user_meta(get_current_user_id(), "woobe_fprofile_saved", 0);
}
if (!empty($profile)) {
if (isset($profile['data']) AND ! empty($profile['data'])) {
$this->storage->set_val('woobe_filter_' . $profile_key, $profile['data']);
} else {
die('-1');
}
} else {
die('-1');
}
die('1');
}
//ajax
public function create_profile() {
if (!current_user_can('manage_woocommerce')) {
die('0');
}
if (!isset($_REQUEST['tools_panel_nonce']) || !wp_verify_nonce($_REQUEST['tools_panel_nonce'], 'woobe_tools_panel_nonce')) {
die('0');
}
$profile_title = sanitize_text_field(trim(htmlentities($_REQUEST['profile_title'], ENT_NOQUOTES)));
if (!empty($profile_title)) {
$filter_current_key = sanitize_text_field($_REQUEST['filter_current_key']);
if (!empty($profile_title) AND ! empty($filter_current_key)) {
echo $this->create($this->storage->get_val('woobe_filter_' . $filter_current_key), $profile_title, $filter_current_key);
}
}
exit;
}
//ajax
public function fprofile_saved_cencel() {
if (!isset($_REQUEST['tools_panel_nonce']) || !wp_verify_nonce($_REQUEST['tools_panel_nonce'], 'woobe_tools_panel_nonce')) {
die('0');
}
update_user_meta(get_current_user_id(), "woobe_fprofile_saved", 0);
}
public function get_filter_profile_data() {
$res = array();
$res['taxonomies'] = array();
$res['taxonomies_operators'] = array();
$res['taxonomies_terms_titles'] = array();
$profile = $this->get(sanitize_text_field($_REQUEST['profile_key']));
if (!empty($profile['data'])) {
foreach ($profile['data'] as $key => $value) {
if (in_array($key, array('taxonomies_operators', 'tax_query', 'meta_query'))) {
continue;
}
//***
if ($key == 'taxonomies') {
if (!empty($value)) {
foreach ($value as $tax_key => $terms) {
$res['taxonomies'][$tax_key] = $terms;
if (!empty($terms)) {
foreach ($terms as $term_id) {
$term = get_term_by('id', $term_id, $tax_key);
$res['taxonomies_terms_titles'][$term_id] = $term->name;
}
}
$res['taxonomies_operators'][$tax_key] = $profile['data']['taxonomies_operators'][$tax_key];
}
}
continue;
}
//***
if (is_array($value)) {
if (isset($value['value']) AND ! empty($value['value'])) {
$res[$key]['value'] = $value['value'];
$res[$key]['behavior'] = $value['behavior'];
}
if (isset($value['from']) AND ! empty($value['from'])) {
$res[$key]['from'] = $value['from'];
}
if (isset($value['to']) AND ! empty($value['to'])) {
$res[$key]['to'] = $value['to'];
}
} else {
if (!empty($value) AND intval($value) !== -1) {
/*
if ($this->settings->get_fields(false)[$key]['edit_view'] == 'calendar') {
$products = new WOOBE_PRODUCTS($this->settings, $this->storage);
$value = $products->normalize_calendar_date($value, $key);
}
*/
$res[$key] = $value;
}
}
}
}
//***
$html = '';
if (!empty($res)) {
foreach ($res as $key => $value) {
if (in_array($key, array('taxonomies_operators', 'taxonomies_terms_titles'))) {
continue;
}
//***
if ($key == 'taxonomies') {
if (!empty($value)) {
foreach ($value as $tax_key => $terms) {
if (!empty($terms)) {
foreach ($terms as $term_id) {
$html .= '<li>' . $res['taxonomies_terms_titles'][$term_id] . ' (<i>' . $res['taxonomies_operators'][$tax_key] . '</i>)' . '</li>';
}
}
}
}
continue;
}
//***
if (is_array($value)) {
if (isset($value['value'])) {
$html .= '<li><b>' . $key . '</b>: <i>' . $value['value'] . '</i> (' . $value['behavior'] . ')</li>';
} else {
$tmp = array(
'from' => '-',
'to' => '-'
);
if (isset($value['from'])) {
$tmp['from'] = $value['from'];
}
if (isset($value['to'])) {
$tmp['to'] = $value['to'];
}
$html .= '<li><b>' . $key . '</b>: <i>' . $tmp['from'] . ' - ' . $tmp['to'] . '</i></li>';
}
} else {
$html .= '<li><b>' . $key . '</b>: <i>' . $value . '</i></li>';
}
}
}
//***
$answer = array(
'res' => $res,
'html' => $html
);
die(json_encode($answer));
}
}