File "woofilters.php"
Full Path: /home/vantageo/public_html/cache/cache/.wp-cli/wp-content/plugins/woo-product-filter/modules/woofilters/models/woofilters.php
File size: 15.35 KB
MIME-type: text/x-php
Charset: utf-8
<?php
class WoofiltersModelWpf extends ModelWpf {
public function __construct() {
$this->_setTbl('filters');
}
public function getAllFilters() {
$filterTypes = array(
'wpfPrice' => array(
'name' => esc_html__('Price', 'woo-product-filter'),
'slug' => esc_attr__('price', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
'group' => 'wpfPriceRange'
),
'wpfPriceRange' => array(
'name' => esc_html__('Price range', 'woo-product-filter'),
'slug' => esc_attr__('price range', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
'group' => 'wpfPrice'
),
'wpfSortBy' => array(
'name' => esc_html__('Sort by', 'woo-product-filter'),
'slug' => esc_attr__('sort by', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
),
'wpfCategory' => array(
'name' => esc_html__('Product categories', 'woo-product-filter'),
'slug' => esc_attr__('category', 'woo-product-filter'),
'enabled' => true,
'unique' => false,
'content_type' => 'taxonomy',
'filtername' => 'wpf_filter_cat'
),
'wpfTags' => array(
'name' => esc_html__('Product tags', 'woo-product-filter'),
'slug' => esc_attr__('tag', 'woo-product-filter'),
'enabled' => true,
'unique' => false,
'content_type' => 'taxonomy',
'filtername' => 'product_tag'
),
'wpfAttribute' => array(
'name' => esc_html__('Attribute', 'woo-product-filter'),
'slug' => '',
'enabled' => true,
'unique' => false,
'content_type' => 'taxonomy',
),
'wpfAuthor' => array(
'name' => esc_html__('Author', 'woo-product-filter'),
'slug' => esc_attr__('author', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'user',
),
'wpfFeatured' => array(
'name' => esc_html__('Featured', 'woo-product-filter'),
'slug' => esc_attr__('featured', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
),
'wpfOnSale' => array(
'name' => esc_html__('On sale', 'woo-product-filter'),
'slug' => esc_attr__('on sale', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
),
'wpfInStock' => array(
'name' => esc_html__('Stock status', 'woo-product-filter'),
'slug' => esc_attr__('stock status', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
),
'wpfRating' => array(
'name' => esc_html__('Rating', 'woo-product-filter'),
'slug' => esc_attr__('rating', 'woo-product-filter'),
'enabled' => true,
'unique' => true,
'content_type' => 'meta',
),
'wpfSearchText' => array(
'name' => esc_html__('Search by Text', 'woo-product-filter'),
'slug' => esc_attr__('text', 'woo-product-filter'),
'enabled' => false,
'unique' => true,
'content_type' => '',
),
'wpfSearchNumber' => array(
'name' => esc_html__('Search by Number', 'woo-product-filter'),
'slug' => esc_attr__('number', 'woo-product-filter'),
'enabled' => false,
'unique' => false,
'content_type' => '',
),
);
/**
* Plugin compatibility
*
* @link https://wordpress.org/plugins/perfect-woocommerce-brands
*/
if (taxonomy_exists('pwb-brand')) {
$filterTypes['wpfPerfectBrand'] = array(
'name' => esc_html__('Perfect brands', 'woo-product-filter'),
'slug' => esc_attr__('brand', 'woo-product-filter'),
'enabled' => true,
'unique' => false,
'content_type' => 'taxonomy',
);
}
/**
* Plugin compatibility
*
* @link https://woocommerce.com/products/brands
*/
if (taxonomy_exists('product_brand')) {
$filterTypes['wpfBrand'] = array(
'name' => esc_html__('Product brands', 'woo-product-filter'),
'slug' => esc_attr__('brand', 'woo-product-filter'),
'enabled' => false,
'unique' => true,
'content_type' => 'taxonomy',
);
}
/**
* Plugin compatibility
*
* @link https://wordpress.org/plugins/wc-vendors/
*/
if ( class_exists('WC_Vendors')) {
$filterTypes['wpfVendors'] = array(
'name' => esc_html__('Vendors', 'woo-product-filter'),
'slug' => esc_attr__('vendors', 'woo-product-filter'),
'enabled' => false,
'unique' => true,
'content_type' => 'user',
);
}
return DispatcherWpf::applyFilters('addFilterTypes', $filterTypes);
}
public function getSortByFilterLabels ( $params = [] ) {
$labels = $this->getFilterLabels('SortBy');
if ( $params ) {
$newLabels = [];
$field = 'f_options[]';
foreach ( $params as $key=>$value ) {
if ('wpfSortBy' == $value->id && isset($value->settings) && !empty($value->settings->{$field})) {
foreach ( explode(',', $value->settings->{$field}) as $_key=>$_value ) {
if ( isset($labels[$_value]) ) {
$newLabels[$_value] = $labels[$_value];
}
}
break;
}
}
if ($newLabels) {
if (count($newLabels) != count($labels) ) {
$diff = array_diff($labels, $newLabels);
if ($diff) {
$newLabels = array_merge($newLabels, $diff);
}
}
return $newLabels;
}
}
return $labels;
}
public function getFilterLabels( $filter ) {
switch ($filter) {
case 'SortBy':
$labels = array(
'default' => esc_html__('Default', 'woo-product-filter'),
'popularity' => esc_html__('Popularity', 'woo-product-filter'),
'rating' => esc_html__('Rating', 'woo-product-filter'),
'date' => esc_html__('Newness', 'woo-product-filter'),
'date-asc' => esc_html__('Oldest first', 'woo-product-filter'),
'price' => esc_html__('Price: low to high', 'woo-product-filter'),
'price-desc' => esc_html__('Price: high to low', 'woo-product-filter'),
'rand' => esc_html__('Random', 'woo-product-filter'),
'title' => esc_html__('Name A to Z', 'woo-product-filter'),
'title-desc' => esc_html__('Name Z to A', 'woo-product-filter'),
'sku' => esc_html__('SKU ascending', 'woo-product-filter'),
'sku-desc' => esc_html__('SKU descending', 'woo-product-filter'),
);
$custom = apply_filters('woocommerce_catalog_orderby', array());
if (!empty($custom)) {
$labels = array_merge($labels, $custom);
}
break;
case 'InStock':
$labels = array(
'instock' => esc_html__('In Stock', 'woo-product-filter'),
'outofstock' => esc_html__('Out of Stock', 'woo-product-filter'),
'onbackorder' => esc_html__('On Backorder', 'woo-product-filter'),
);
break;
case 'OnSale':
$labels = array(
'onsale' => esc_html__('On Sale', 'woo-product-filter')
);
break;
case 'Category':
case 'PerfectBrand':
case 'Tags':
case 'Attribute':
case 'Author':
$labels = array(
'search' => esc_html__('Search ...', 'woo-product-filter')
);
break;
default:
$labels = array();
break;
}
return $labels;
}
public function save( $data = array() ) {
$id = isset($data['id']) ? $data['id'] : false;
$title = !empty($data['title']) ? $data['title'] : gmdate('Y-m-d-h-i-s');
$data['title'] = $title;
$duplicateId = isset($data['duplicateId']) ? $data['duplicateId'] : false;
//already created filter
if ( !empty($id) && !empty($title) ) {
$data['id'] = (string) $id;
$statusUpdate = $this->updateById( $data , $id );
if ($statusUpdate) {
return $id;
}
} else if ( empty($id) && !empty($title) && empty($duplicateId) ) { //empty filter
$idInsert = $this->insert( $data );
if ($idInsert) {
if (empty($title)) {
$title = (string) $idInsert;
}
$data['id'] = (string) $idInsert;
$this->updateById( $data , $idInsert );
}
return $idInsert;
} elseif ( empty($id) && !empty($title) && !empty($duplicateId) ) { //duplicate filter
$duplicateData = $this->getById($duplicateId);
$settings = unserialize($duplicateData['setting_data']);
$settings['settings']['css_editor'] = stripslashes(base64_decode($settings['settings']['css_editor']));
$settings['settings']['js_editor'] = stripslashes(base64_decode($settings['settings']['js_editor']));
$duplicateData['settings'] = $settings['settings'];
$duplicateData['title'] = isset($title) ? $title : 'untitled';
$duplicateData['id'] = '';
$idInsert = $this->insert( $duplicateData );
return $idInsert;
}
return false;
}
protected function _dataSave( $data, $update = false ) {
$esettings = isset($data['esettings']) ? UtilsWpf::jsonDecode(stripslashes($data['esettings'])) : array();
if (!empty($esettings)) {
$data['settings'] = array_merge($esettings, ( isset($data['settings']) && is_array($data['settings']) ? $data['settings'] : array() ));
}
$settings = isset($data['settings']) ? $data['settings'] : array();
$data['settings']['css_editor'] = isset($settings['css_editor']) ? base64_encode($settings['css_editor']) : '';
$data['settings']['js_editor'] = isset($settings['js_editor']) ? base64_encode($settings['js_editor']) : '';
$data['settings']['filters']['order'] = isset($settings['filters']) && isset($settings['filters']['order']) ? stripslashes($settings['filters']['order']) : '';
$notEdit = array('css_editor', 'js_editor', 'filters');
foreach ($data['settings'] as $key => $value) {
if (!in_array($key, $notEdit) && is_string($value)) {
$v = str_replace('"', '"', str_replace('\"', '"', $value));
$data['settings'][$key] = str_replace("'", ''', str_replace("\'", "'", $v));
}
}
$metaKeys = $this->getDataFilterMetaKeys($data['settings']['filters']['order']);
$data['meta_keys'] = count($metaKeys) > 0 ? implode('|', $metaKeys) : '';
$settingData = array('settings' => $data['settings']);
$data['setting_data'] = addslashes(serialize($settingData));
$this->translateStrings($data['settings']);
return $data;
}
/**
* WPML string translation
*/
private function translateStrings( $data_settings ) {
$filters_arr = json_decode($data_settings['filters']['order'], true);
// print_r($filters_arr);
// die;
// here goes othes filter options strings
if ( is_array( $filters_arr ) ) {
foreach ( $filters_arr as $key => $filter ) {
if ( isset( $filter['settings']['f_dropdown_first_option_text'] ) ) {
wpf_translate_string( $filter['settings']['f_dropdown_first_option_text'] );
}
if ( isset( $filter['settings']['f_title'] ) ) {
wpf_translate_string( $filter['settings']['f_title'] );
}
if ( isset( $filter['settings']['f_description'] ) ) {
wpf_translate_string( $filter['settings']['f_description'] );
}
if ( isset( $filter['settings']['f_custom_title'] ) ) {
wpf_translate_string( $filter['settings']['f_custom_title'] );
}
if ( isset( $filter['settings']['f_search_label'] ) ) {
wpf_translate_string( $filter['settings']['f_search_label'] );
}
if ( isset( $filter['settings']['f_stock_statuses[in]'] ) ) {
wpf_translate_string( $filter['settings']['f_stock_statuses[in]'] );
}
if ( isset( $filter['settings']['f_stock_statuses[out]'] ) ) {
wpf_translate_string( $filter['settings']['f_stock_statuses[out]'] );
}
if ( isset( $filter['settings']['f_stock_statuses[on]'] ) ) {
wpf_translate_string( $filter['settings']['f_stock_statuses[on]'] );
}
if ( isset( $filter['settings']['f_add_text'] ) ) {
wpf_translate_string( $filter['settings']['f_add_text'] );
}
if ( isset( $filter['settings']['f_add_text5'] ) ) {
wpf_translate_string( $filter['settings']['f_add_text5'] );
}
if ( isset( $filter['settings']['f_checkbox_label'] ) ) {
wpf_translate_string( $filter['settings']['f_checkbox_label'] );
}
}
}
// here goes other plugin settings strings
if (!empty($data_settings['filtering_button_word'])) {
wpf_translate_string($data_settings['filtering_button_word']); // ?
}
if (!empty($data_settings['show_clean_button_word'])) {
wpf_translate_string($data_settings['show_clean_button_word']); // ?
}
if (!empty($data_settings['hide_button_hide_text'])) {
wpf_translate_string($data_settings['hide_button_hide_text']); // ?
}
if (!empty($data_settings['hide_button_show_text'])) {
wpf_translate_string($data_settings['hide_button_show_text']); // ?
}
if (!empty($data_settings['text_no_products'])) {
wpf_translate_string($data_settings['text_no_products']); // ?
}
if (!empty($data_settings['enable_overlay_word']) && '1' == $data_settings['enable_overlay_word'] && !empty($data_settings['overlay_word'])) {
wpf_translate_string($data_settings['overlay_word']); // ?
}
if (!empty($data_settings['selected_params_clear']) && '1' == $data_settings['selected_params_clear'] && !empty($data_settings['selected_clean_word'])) {
wpf_translate_string($data_settings['selected_clean_word']); // ?
}
}
public function getDataFilterMetaKeys( $filters, $save = true ) {
$filters = UtilsWpf::jsonDecode($filters);
$metaKeys = DispatcherWpf::applyFilters('addCustomMetaKeys', array(), $filters);
foreach ($metaKeys as $k => $key) {
$metaKeys[$k] = strtolower($key);
}
if ($save && count($metaKeys) > 0) {
$keysModel = FrameWpf::_()->getModule('meta')->getModel('meta_keys');
if (!$keysModel->addFilterMetaKeys($metaKeys)) {
$this->pushError($keysModel->getErrors());
}
}
return $metaKeys;
}
public function getFiltersMetaKeys( $id = 0, $deep = false ) {
$keys = array();
if (!$deep) {
if (!empty($id)) {
$this->addWhere(array('id' => $id));
}
$data = $this->setSelectFields('meta_keys')->addWhere("meta_keys is null OR meta_keys!=''")->getFromTbl(array('return' => 'col'));
foreach ($data as $str) {
if (is_null($str)) {
$deep = true;
break;
}
$keys = array_merge($keys, explode('|', $str));
}
}
if ($deep) {
$keys = array();
if (!empty($id)) {
$this->addWhere(array('id' => $id));
}
$data = $this->setSelectFields('id, setting_data')->getFromTbl();
foreach ($data as $filter) {
$settings = unserialize($filter['setting_data']);
$metaKeys = $settings && !empty($settings['settings']['filters']['order']) ? $this->getDataFilterMetaKeys($settings['settings']['filters']['order'], false) : array();
$query = "UPDATE `@__filters` SET meta_keys='";
if (!empty($metaKeys)) {
$query .= implode('|', $metaKeys);
$keys = array_merge($keys, $metaKeys);
}
if (!DbWpf::query($query . "' WHERE id=" . $filter['id'])) {
$this->pushError(DbWpf::getError());
return false;
}
}
}
return $keys;
}
}