<?php
if (!defined('ABSPATH'))
die('No direct access allowed');
final class WOOF_CONDITIONALS extends WOOF_EXT {
public $type = 'application';
public $folder_name = 'conditionals';
public $html_type_dynamic_recount_behavior = 'none';
public $search_key = array();
public $options = array();
public function __construct() {
parent::__construct();
$this->init();
$this->search_key = array(
'stock' => 'by_instock',
'onsales' => 'by_onsales',
'min_rating' => 'by_rating',
"min_price" => 'by_price',
'woof_author' => 'by_author',
'woof_text' => 'by_text',
'product_visibility' => 'by_featured',
'woof_sku' => 'by_sku',
'backorder' => 'by_backorder'
);
}
public function get_ext_path() {
return plugin_dir_path(__FILE__);
}
public function get_ext_override_path() {
return get_stylesheet_directory() . DIRECTORY_SEPARATOR . "woof" . DIRECTORY_SEPARATOR . "ext" . DIRECTORY_SEPARATOR . $this->folder_name . DIRECTORY_SEPARATOR;
}
public function get_ext_link() {
return plugin_dir_url(__FILE__);
}
public function init() {
add_action('woof_print_applications_tabs_anvanced', array($this, 'woof_print_applications_tabs'), 10, 1);
add_action('woof_print_applications_tabs_content_advanced', array($this, 'woof_print_applications_tabs_content'), 10, 1);
add_filter('woof_filter_shortcode_args', array($this, 'check_conditionals'));
$this->options = array();
}
public function wp_head() {
}
public function woof_print_applications_tabs() {
?>
<li>
<a href="#tabs-conditionals">
<span class="icon-air"></span>
<span><?php esc_html_e("Сonditionals", 'woocommerce-products-filter') ?></span>
</a>
</li>
<?php
}
public function check_conditionals($attrs) {
if (!isset($attrs['shortcode_atts']['conditionals']) AND (isset(woof()->settings['woof_conditionals']) AND woof()->settings['woof_conditionals'])) {
if (!isset($attrs['shortcode_atts']) OR!is_array($attrs['shortcode_atts'])) {
$attrs['shortcode_atts'] = array();
}
$attrs['shortcode_atts']['conditionals'] = woof()->settings['woof_conditionals'];
}
if (isset($attrs['shortcode_atts']['conditionals'])) {
///'tax_exclude'
$terms = $this->generate_conditional_attr(preg_replace('/&(amp;)?#\d+;/', '', $attrs['shortcode_atts']['conditionals']));
$attrs['tax_exclude'] = $this->get_all_keys($terms);
$request = woof()->get_request_data();
$request = array_keys($request);
foreach ($request as $key_r => $item_r) {
$request[$key_r] = str_replace("rev_", "", $item_r);
if (isset($this->search_key[$item_r])) {
$request[$key_r] = $this->search_key[$item_r];
}
$index = array_search($request[$key_r], $attrs['tax_exclude']);
if (false !== $index) {
unset($attrs['tax_exclude'][$index]);
}
}
foreach ($terms as $terms_item) {
foreach ($terms_item as $item) {
$res = array_intersect($request, $item);
$attrs['tax_exclude'] = array_diff($attrs['tax_exclude'], $item);
if (!count($res)) {
break;
}
}
}
}
return $attrs;
}
public function woof_print_applications_tabs_content() {
//***
$data = array();
$data['woof_settings'] = $this->woof_settings;
$data['search_key'] = $this->search_key;
woof()->render_html_e($this->get_ext_path() . 'views/tabs_content.php', $data);
}
public function generate_conditional_attr($string) {
$conditionals = array();
$string = str_replace(PHP_EOL, "+", $string);
$steps = explode('+', $string);
foreach ($steps as $key => $step) {
$step = explode('>', trim($step, "\x00..\x1F"));
foreach ($step as $s_key => $items) {
$conditionals[$key][$s_key] = explode(',', $items);
array_map('trim', $conditionals[$key][$s_key]);
}
}
return $conditionals;
}
public function get_all_keys($terms, $all_terms = false) {
$names = array();
foreach ($terms as $items) {
foreach ($items as $key => $item) {
if ($key == 0 AND!$all_terms) {
continue;
}
$names = array_merge($names, $item);
}
}
return $names;
}
}
WOOF_EXT::$includes['applications']['conditionals'] = new WOOF_CONDITIONALS();