/**
  * Search all Grids and change the term IDs set in the selected terms if needed
  * @since: 2.1.0
  **/
 static function split_terms_fix($old_term_id, $new_term_id, $term_taxonomy_id, $taxonomy)
 {
     $base = new Essential_Grid_Base();
     $lang = array();
     if (Essential_Grid_Wpml::is_wpml_exists()) {
         $lang = icl_get_languages();
     }
     $grids = Essential_Grid::get_essential_grids();
     if (!empty($grids)) {
         foreach ($grids as $grid) {
             $selected = json_decode($grid->postparams, true);
             $post_category = $base->getVar($selected, 'post_category');
             $cat_tax = $base->getCatAndTaxData($post_category);
             $cats = array();
             if (!empty($cat_tax['cats'])) {
                 $cats = explode(',', $cat_tax['cats']);
             }
             $taxes = array('post_tag');
             if (!empty($cat_tax['tax'])) {
                 $taxes = explode(',', $cat_tax['tax']);
             }
             $cont = false;
             if (!empty($cats)) {
                 foreach ($cats as $cat) {
                     if ($old_term_id == $cat && in_array($taxonomy, $taxes)) {
                         //ID needs to be changed
                         foreach ($taxes as $t) {
                             //replace all occuring old term id with the new term id and then Save the Grid
                             $post_category = str_replace($t . '_' . $old_term_id, $t . '_' . $new_term_id, $post_category);
                         }
                         $selected['post_category'] = $post_category;
                         $grid->postparams = $selected;
                         $grid->params = json_decode($grid->params, true);
                         $grid->layers = json_decode($grid->layers, true);
                         $new_grid = (array) $grid;
                         //cast to array as update_create_grid expects an array
                         Essential_Grid_Admin::update_create_grid($new_grid);
                         //now delete cache of the Grid so that changes take effect immediately
                         if (!empty($lang)) {
                             foreach ($lang as $code => $val) {
                                 delete_transient('ess_grid_trans_query_' . $grid->id . $val['language_code']);
                                 delete_transient('ess_grid_trans_full_grid_' . $grid->id . $val['language_code']);
                             }
                         } else {
                             delete_transient('ess_grid_trans_query_' . $grid->id);
                             delete_transient('ess_grid_trans_full_grid_' . $grid->id);
                         }
                         $cont = true;
                     }
                     if ($cont == true) {
                         break;
                     }
                 }
             }
         }
     }
 }
예제 #2
0
 public function output_filter_unwrapped($demo = false, $type = '')
 {
     //$type -> names what settings we need to check for: filter, filter2, filter3
     global $sitepress;
     $grouping = isset($this->filter_settings['filter' . $type]['filter-grouping']) ? $this->filter_settings['filter' . $type]['filter-grouping'] : 'false';
     $listing = isset($this->filter_settings['filter' . $type]['filter-listing']) ? $this->filter_settings['filter' . $type]['filter-listing'] : 'list';
     $amount = isset($this->filter_show_count['filter' . $type]) && $this->filter_show_count['filter' . $type] == 'on' ? ' eg-show-amount' : '';
     $do_show = @$this->filter_settings['filter' . $type]['filter-selected'];
     $dropdown = '';
     switch ($listing) {
         case 'dropdown':
             //use dropdown
             $dropdown = ' dropdownstyle';
             break;
         case 'mobiledropdownstyle':
             //use dropdown only on mobile
             $dropdown = ' mobiledropdownstyle';
             break;
     }
     echo '<!-- THE FILTERING, SORTING AND WOOCOMMERCE BUTTONS -->';
     echo '<!-- THE FILTER BUTTONS -->';
     echo '<div class="esg-filter-wrapper' . $dropdown . $amount . ' ' . $this->special_class . '"';
     if ($this->spacing !== false) {
         echo $this->spacing;
     }
     echo '>';
     if ($listing == 'dropdown') {
         echo '<div class="esg-selected-filterbutton"><span>' . $this->filter_dropdown_text['filter' . $type] . '</span><i class="eg-icon-down-open"></i></div>';
         echo '<div class="esg-dropdown-wrapper">';
     }
     $sel = !empty($this->filter_start_select) ? '' : ' selected';
     echo '<div class="esg-filterbutton' . $sel . ' esg-allfilter" data-filter="filterall" data-fid="-1"><span>' . @$this->filter_all_text['filter' . $type] . '</span></div>';
     if ($demo) {
         echo '<div class="esg-filterbutton" data-filter="filter-favorite"><span>' . __('Favorites', EG_TEXTDOMAIN) . '</span><span class="esg-filter-checked"><i class="eg-icon-ok-1"></i></span></div>';
     }
     if (!empty($do_show) && is_array($do_show)) {
         //we are a post based grid
         foreach ($do_show as $string_id) {
             $fraw = explode('_', $string_id);
             $f_id = array_pop($fraw);
             if (Essential_Grid_Wpml::is_wpml_exists() && isset($sitepress)) {
                 $f_id = icl_object_id($f_id, implode('_', $fraw), true, ICL_LANGUAGE_CODE);
             }
             if (isset($this->filter[$f_id])) {
                 $filter_text = $demo ? self::translate_demo_filter($this->filter[$f_id]['slug']) : $this->filter[$f_id]['name'];
                 $sel = in_array(sanitize_key($this->filter[$f_id]['slug']), $this->filter_start_select) ? ' selected' : '';
                 $parent_id = isset($this->filter[$f_id]['parent']) && intval($this->filter[$f_id]['parent']) > 0 ? $this->filter[$f_id]['parent'] : 0;
                 $parent = $parent_id > 0 ? ' data-pid="' . $parent_id . '"' : '';
                 echo '<div class="esg-filterbutton' . $sel . '" data-fid="' . $f_id . '"' . $parent . ' data-filter="filter-' . sanitize_key($this->filter[$f_id]['slug']) . '"><span>' . $filter_text . '</span><span class="esg-filter-checked"><i class="eg-icon-ok-1"></i></span></div>';
             }
         }
     } else {
         if (!empty($this->filter)) {
             foreach ($this->filter as $filter_id => $filter) {
                 $filter_text = $demo ? self::translate_demo_filter($filter['slug']) : $filter['name'];
                 $sel = in_array(sanitize_key($filter['slug']), $this->filter_start_select) ? ' selected' : '';
                 $parent_id = isset($filter['parent']) && intval($filter['parent']) > 0 ? $filter['parent'] : 0;
                 $parent = $parent_id > 0 ? ' data-pid="' . $parent_id . '"' : '';
                 echo '<div class="esg-filterbutton' . $sel . '" data-fid="' . $filter_id . '"' . $parent . ' data-filter="filter-' . sanitize_key($filter['slug']) . '"><span>' . $filter_text . '</span><span class="esg-filter-checked"><i class="eg-icon-ok-1"></i></span></div>';
             }
         }
     }
     if ($listing == 'dropdown') {
         echo '</div>';
     }
     echo '<div class="eg-clearfix"></div>';
     echo '</div>';
 }
예제 #3
0
 /**
  * get cats and taxanomies data from the category id's
  */
 public static function getCatAndTaxData($catIDs)
 {
     if (is_string($catIDs)) {
         $catIDs = trim($catIDs);
         if (empty($catIDs)) {
             return array("tax" => "", "cats" => "");
         }
         $catIDs = explode(",", $catIDs);
     }
     $strCats = "";
     $arrTax = array();
     foreach ($catIDs as $cat) {
         if (strpos($cat, "option_disabled") === 0) {
             continue;
         }
         $pos = strrpos($cat, "_");
         $taxName = substr($cat, 0, $pos);
         $catID = substr($cat, $pos + 1, strlen($cat) - $pos - 1);
         //translate catID to current language if wpml exists
         $catID = Essential_Grid_Wpml::change_cat_id_by_lang($catID, $taxName);
         $arrTax[$taxName] = $taxName;
         if (!empty($strCats)) {
             $strCats .= ",";
         }
         $strCats .= $catID;
     }
     $strTax = "";
     foreach ($arrTax as $taxName) {
         if (!empty($strTax)) {
             $strTax .= ",";
         }
         $strTax .= $taxName;
     }
     $output = array("tax" => $strTax, "cats" => $strCats);
     return $output;
 }
 /**
  * Handle Ajax Requests
  */
 public static function on_ajax_action()
 {
     try {
         $token = self::getPostVar('token', false);
         //verify the token
         $isVerified = wp_verify_nonce($token, 'Essential_Grid_actions');
         $error = false;
         if ($isVerified) {
             $data = self::getPostVar("data", false);
             switch (self::getPostVar("client_action", false)) {
                 case 'add_google_fonts':
                     $f = new ThemePunch_Fonts();
                     $result = $f->add_new_font($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Font successfully created!", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getFontsUrl()));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'remove_google_fonts':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('Font not found', EG_TEXTDOMAIN), false);
                     }
                     $f = new ThemePunch_Fonts();
                     $result = $f->remove_font_by_handle($data['handle']);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Font successfully removed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'edit_google_fonts':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('No handle given', EG_TEXTDOMAIN), false);
                     }
                     if (!isset($data['url'])) {
                         Essential_Grid::ajaxResponseError(__('No parameters given', EG_TEXTDOMAIN), false);
                     }
                     $f = new ThemePunch_Fonts();
                     $result = $f->edit_font_by_handle($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Font successfully changed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'add_custom_meta':
                     $m = new Essential_Grid_Meta();
                     $result = $m->add_new_meta($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Meta successfully created!", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getSubViewUrl(Essential_Grid_Admin::VIEW_SUB_CUSTOM_META_AJAX)));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'remove_custom_meta':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('Meta not found', EG_TEXTDOMAIN), false);
                     }
                     $m = new Essential_Grid_Meta();
                     $result = $m->remove_meta_by_handle($data['handle']);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Meta successfully removed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'edit_custom_meta':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('No handle given', EG_TEXTDOMAIN), false);
                     }
                     if (!isset($data['name'])) {
                         Essential_Grid::ajaxResponseError(__('No name given', EG_TEXTDOMAIN), false);
                     }
                     $m = new Essential_Grid_Meta();
                     $result = $m->edit_meta_by_handle($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Meta successfully changed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'add_link_meta':
                     $m = new Essential_Grid_Meta_Linking();
                     $result = $m->add_new_link_meta($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Meta successfully created!", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getSubViewUrl(Essential_Grid_Admin::VIEW_SUB_CUSTOM_META_AJAX)));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'remove_link_meta':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('Meta not found', EG_TEXTDOMAIN), false);
                     }
                     $m = new Essential_Grid_Meta_Linking();
                     $result = $m->remove_link_meta_by_handle($data['handle']);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Meta successfully removed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'edit_link_meta':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('No handle given', EG_TEXTDOMAIN), false);
                     }
                     if (!isset($data['name'])) {
                         Essential_Grid::ajaxResponseError(__('No name given', EG_TEXTDOMAIN), false);
                     }
                     if (!isset($data['original'])) {
                         Essential_Grid::ajaxResponseError(__('No original given', EG_TEXTDOMAIN), false);
                     }
                     $m = new Essential_Grid_Meta_Linking();
                     $result = $m->edit_link_meta_by_handle($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Meta successfully changed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'add_widget_area':
                     $wa = new Essential_Grid_Widget_Areas();
                     $result = $wa->add_new_sidebar($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Widget Area successfully created!", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getSubViewUrl(Essential_Grid_Admin::VIEW_SUB_WIDGET_AREA_AJAX)));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'edit_widget_area':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('No handle given', EG_TEXTDOMAIN), false);
                     }
                     if (!isset($data['name'])) {
                         Essential_Grid::ajaxResponseError(__('No name given', EG_TEXTDOMAIN), false);
                     }
                     $wa = new Essential_Grid_Widget_Areas();
                     $result = $wa->edit_widget_area_by_handle($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Widget Area successfully changed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'remove_widget_area':
                     if (!isset($data['handle'])) {
                         Essential_Grid::ajaxResponseError(__('Widget Area not found', EG_TEXTDOMAIN), false);
                     }
                     $wa = new Essential_Grid_Widget_Areas();
                     $result = $wa->remove_widget_area_by_handle($data['handle']);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Widget Area successfully removed!", EG_TEXTDOMAIN), array('data' => $result));
                     } else {
                         Essential_Grid::ajaxResponseError($result, false);
                     }
                     break;
                 case 'get_preview_html_markup':
                     //add wpml transient
                     $lang_code = '';
                     if (Essential_Grid_Wpml::is_wpml_exists()) {
                         $lang_code = Essential_Grid_Wpml::get_current_lang_code();
                     }
                     if (isset($data['id'])) {
                         delete_transient('ess_grid_trans_query_' . $data['id'] . $lang_code);
                         //delete cache
                     }
                     $result = Essential_Grid_Base::output_demo_skin_html($data);
                     if (isset($result['error'])) {
                         Essential_Grid::ajaxResponseData($result);
                     } else {
                         Essential_Grid::ajaxResponseData(array("data" => array('html' => $result['html'], 'preview' => @$result['preview'])));
                     }
                     break;
                     /* //TP: CHUNK
                     			case 'get_preview_html_markup_chunk': //only for custom grid
                     				$grid = new Essential_Grid();
                     				$grid->init_by_data($data);
                     				
                     				$html = '';
                     				
                     				if($grid->is_custom_grid()){
                     					ob_start();
                     					$grid->output_by_custom('custom', true);
                     					$html = ob_get_contents();
                     					ob_clean();
                     					ob_end_clean();
                     				}
                     				$order_id = self::getPostVar("order_id", false);
                     				
                     				Essential_Grid::ajaxResponseData(array("data"=>array('preview' => $html, 'order_id' => $order_id)));
                     				
                     			break; */
                 /* //TP: CHUNK
                 			case 'get_preview_html_markup_chunk': //only for custom grid
                 				$grid = new Essential_Grid();
                 				$grid->init_by_data($data);
                 				
                 				$html = '';
                 				
                 				if($grid->is_custom_grid()){
                 					ob_start();
                 					$grid->output_by_custom('custom', true);
                 					$html = ob_get_contents();
                 					ob_clean();
                 					ob_end_clean();
                 				}
                 				$order_id = self::getPostVar("order_id", false);
                 				
                 				Essential_Grid::ajaxResponseData(array("data"=>array('preview' => $html, 'order_id' => $order_id)));
                 				
                 			break; */
                 case 'save_search_settings':
                     if (!empty($data)) {
                         update_option('esg-search-settings', $data);
                     }
                     Essential_Grid::ajaxResponseSuccess(__("Search Settings succesfully saved!", EG_TEXTDOMAIN));
                     break;
                 case 'update_general_settings':
                     $result = self::savePluginPermission($data['permission']);
                     $cur_query = get_option('tp_eg_query_type', 'wp_query');
                     update_option('tp_eg_output_protection', @$data['protection']);
                     update_option('tp_eg_tooltips', @$data['tooltips']);
                     update_option('tp_eg_wait_for_fonts', @$data['wait_for_fonts']);
                     update_option('tp_eg_js_to_footer', @$data['js_to_footer']);
                     update_option('tp_eg_use_cache', @$data['use_cache']);
                     update_option('tp_eg_query_type', @$data['query_type']);
                     update_option('tp_eg_enable_log', @$data['enable_log']);
                     update_option('tp_eg_use_lightbox', @$data['use_lightbox']);
                     if (@$data['use_lightbox'] === 'jackbox') {
                         Essential_Grid_Jackbox::enable_jackbox();
                     } else {
                         Essential_Grid_Jackbox::disable_jackbox();
                     }
                     if ($cur_query !== $data['query_type']) {
                         //delete cache
                         $lang = array();
                         if (Essential_Grid_Wpml::is_wpml_exists()) {
                             $lang = icl_get_languages();
                         }
                         $grids = Essential_Grid::get_essential_grids();
                         if (!empty($grids)) {
                             foreach ($grids as $grid) {
                                 if (!empty($lang)) {
                                     foreach ($lang as $code => $val) {
                                         delete_transient('ess_grid_trans_query_' . $grid->id . $val['language_code']);
                                         delete_transient('ess_grid_trans_full_grid_' . $grid->id . $val['language_code']);
                                     }
                                 } else {
                                     delete_transient('ess_grid_trans_query_' . $grid->id);
                                     delete_transient('ess_grid_trans_full_grid_' . $grid->id);
                                 }
                             }
                         }
                     }
                     if ($result !== true) {
                         $error = __("Global Settings did not change!", EG_TEXTDOMAIN);
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Global Settings succesfully saved!", EG_TEXTDOMAIN), $result);
                     }
                     break;
                 case 'update_create_grid':
                     $result = self::update_create_grid($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         $lang = array();
                         if (Essential_Grid_Wpml::is_wpml_exists()) {
                             $lang = icl_get_languages();
                         }
                         if (isset($data['id']) && intval($data['id']) > 0) {
                             if (!empty($lang)) {
                                 foreach ($lang as $code => $val) {
                                     delete_transient('ess_grid_trans_query_' . $data['id'] . $val['language_code']);
                                     //delete cache
                                     delete_transient('ess_grid_trans_full_grid_' . $data['id'] . $val['language_code']);
                                     //delete cache
                                 }
                             } else {
                                 delete_transient('ess_grid_trans_query_' . $data['id']);
                                 //delete cache
                                 delete_transient('ess_grid_trans_full_grid_' . $data['id']);
                                 //delete cache
                             }
                             Essential_Grid::ajaxResponseSuccess(__("Grid successfully saved/changed!", EG_TEXTDOMAIN), $result);
                         } else {
                             Essential_Grid::ajaxResponseSuccess(__("Grid successfully saved/changed!", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl(Essential_Grid_Admin::VIEW_OVERVIEW)));
                         }
                     }
                     break;
                 case 'delete_grid':
                     $result = self::delete_grid_by_id($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Grid deleted", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl(Essential_Grid_Admin::VIEW_OVERVIEW)));
                     }
                     break;
                 case 'duplicate_grid':
                     $result = self::duplicate_grid_by_id($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Grid duplicated", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl(Essential_Grid_Admin::VIEW_OVERVIEW)));
                     }
                     break;
                 case 'update_create_item_skin':
                     $result = Essential_Grid_Item_Skin::update_save_item_skin($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         if (isset($data['id']) && intval($data['id']) > 0) {
                             Essential_Grid::ajaxResponseSuccess(__("Item Skin changed", EG_TEXTDOMAIN), array('data' => $result));
                         } else {
                             Essential_Grid::ajaxResponseSuccess(__("Item Skin created/changed", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl("", "", 'essential-' . Essential_Grid_Admin::VIEW_SUB_ITEM_SKIN_OVERVIEW)));
                         }
                     }
                     break;
                 case 'update_custom_css':
                     if (isset($data['global_css'])) {
                         Essential_Grid_Global_Css::set_global_css_styles($data['global_css']);
                         Essential_Grid::ajaxResponseSuccess(__("CSS saved!", EG_TEXTDOMAIN), '');
                     } else {
                         $error = __("No CSS Received", EG_TEXTDOMAIN);
                     }
                     break;
                 case 'delete_item_skin':
                     $result = Essential_Grid_Item_Skin::delete_item_skin_by_id($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Item Skin deleted", EG_TEXTDOMAIN), array('data' => $result));
                     }
                     break;
                 case 'duplicate_item_skin':
                     $result = Essential_Grid_Item_Skin::duplicate_item_skin_by_id($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Item Skin duplicated", EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl("", "", 'essential-' . Essential_Grid_Admin::VIEW_SUB_ITEM_SKIN_OVERVIEW)));
                     }
                     break;
                 case 'star_item_skin':
                     $result = Essential_Grid_Item_Skin::star_item_skin_by_id($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Favorite Changed", EG_TEXTDOMAIN), array('data' => $result));
                     }
                     break;
                 case 'update_create_item_element':
                     $result = Essential_Grid_Item_Element::update_create_essential_item_element($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Item Element created/changed", EG_TEXTDOMAIN), array('data' => $result));
                     }
                     break;
                 case 'check_item_element_existence':
                     $result = Essential_Grid_Item_Element::check_existence_by_handle(@$data['name']);
                     if ($result === false) {
                         Essential_Grid::ajaxResponseData(array("data" => array('existence' => 'false')));
                     } elseif ($result === true) {
                         Essential_Grid::ajaxResponseData(array("data" => array('existence' => 'true')));
                     } else {
                         Essential_Grid::ajaxResponseData(array("data" => array('existence' => $result)));
                     }
                     break;
                 case 'get_predefined_elements':
                     $elements = Essential_Grid_Item_Element::getElementsForJavascript();
                     $html_elements = Essential_Grid_Item_Element::prepareDefaultElementsForEditor();
                     $html_elements .= Essential_Grid_Item_Element::prepareTextElementsForEditor();
                     Essential_Grid::ajaxResponseData(array("data" => array('elements' => $elements, 'html' => $html_elements)));
                     break;
                 case 'delete_predefined_elements':
                     $result = Essential_Grid_Item_Element::delete_element_by_handle($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         Essential_Grid::ajaxResponseSuccess(__("Item Element successfully deleted", EG_TEXTDOMAIN), array('data' => $result));
                     }
                     break;
                 case 'update_create_navigation_skin_css':
                     $nav = new Essential_Grid_Navigation();
                     $result = $nav->update_create_navigation_skin_css($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         $base = new Essential_Grid_Base();
                         $skin_css = Essential_Grid_Navigation::output_navigation_skins();
                         $skins = Essential_Grid_Navigation::get_essential_navigation_skins();
                         $select = '';
                         foreach ($skins as $skin) {
                             $select .= '<option value="' . $skin['handle'] . '">' . $skin['name'] . '</option>' . "\n";
                         }
                         if (isset($data['sid']) && intval($data['sid']) > 0) {
                             Essential_Grid::ajaxResponseSuccess(__("Navigation Skin successfully changed!", EG_TEXTDOMAIN), array('css' => $skin_css, 'select' => $select, 'default_skins' => $skins));
                         } else {
                             Essential_Grid::ajaxResponseSuccess(__("Navigation Skin successfully created", EG_TEXTDOMAIN), array('css' => $skin_css, 'select' => $select, 'default_skins' => $skins));
                         }
                     }
                     break;
                 case 'delete_navigation_skin_css':
                     $nav = new Essential_Grid_Navigation();
                     $result = $nav->delete_navigation_skin_css($data);
                     if ($result !== true) {
                         $error = $result;
                     } else {
                         $base = new Essential_Grid_Base();
                         $skin_css = Essential_Grid_Navigation::output_navigation_skins();
                         $skins = Essential_Grid_Navigation::get_essential_navigation_skins();
                         $select = '';
                         foreach ($skins as $skin) {
                             $select .= '<option value="' . $skin['handle'] . '">' . $skin['name'] . '</option>' . "\n";
                         }
                         Essential_Grid::ajaxResponseSuccess(__("Navigation Skin successfully deleted!", EG_TEXTDOMAIN), array('css' => $skin_css, 'select' => $select, 'default_skins' => $skins));
                     }
                     break;
                 case 'get_post_meta_html_for_editor':
                     if (!isset($data['post_id']) || intval($data['post_id']) == 0) {
                         Essential_Grid::ajaxResponseError(__('No Post ID/Wrong Post ID!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     if (!isset($data['grid_id']) || intval($data['grid_id']) == 0) {
                         Essential_Grid::ajaxResponseError(__('Please save the grid first to use this feature!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     $post = get_post($data['post_id']);
                     $disable_advanced = true;
                     //nessecary, so that only normal things can be changed in preview mode
                     if (!empty($post)) {
                         $grid_id = $data['grid_id'];
                         ob_start();
                         require 'views/elements/grid-meta-box.php';
                         $content = ob_get_contents();
                         ob_clean();
                         ob_end_clean();
                         Essential_Grid::ajaxResponseData(array("data" => array('html' => $content)));
                     } else {
                         Essential_Grid::ajaxResponseError(__('Post not found!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     break;
                 case 'update_post_meta_through_editor':
                     if (!isset($data['metas']) || !isset($data['metas']['post_id']) || intval($data['metas']['post_id']) == 0) {
                         Essential_Grid::ajaxResponseError(__('No Post ID/Wrong Post ID!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     if (!isset($data['metas']) || !isset($data['metas']['grid_id']) || intval($data['metas']['grid_id']) == 0) {
                         Essential_Grid::ajaxResponseError(__('Please save the grid first to use this feature!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     //set the cobbles setting to the post
                     $cobbles = json_decode(get_post_meta($data['metas']['post_id'], 'eg_cobbles', true), true);
                     $cobbles[$data['metas']['grid_id']]['cobbles'] = $data['metas']['eg_cobbles_size'];
                     $cobbles = json_encode($cobbles);
                     update_post_meta($data['metas']['post_id'], 'eg_cobbles', $cobbles);
                     //set the use_skin setting to the post
                     $use_skin = json_decode(get_post_meta($data['metas']['post_id'], 'eg_use_skin', true), true);
                     $use_skin[$data['metas']['grid_id']]['use-skin'] = $data['metas']['eg_use_skin'];
                     $use_skin = json_encode($use_skin);
                     update_post_meta($data['metas']['post_id'], 'eg_use_skin', $use_skin);
                     $result = self::custom_meta_box_save($data['metas']['post_id'], $data['metas'], true);
                     self::check_for_transient_deletion($data['metas']['post_id']);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__("Post Meta saved!", EG_TEXTDOMAIN), array());
                     } else {
                         Essential_Grid::ajaxResponseError(__('Post not found!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     break;
                 case 'trigger_post_meta_visibility':
                     if (!isset($data['post_id']) || intval($data['post_id']) == 0) {
                         Essential_Grid::ajaxResponseError(__('No Post ID/Wrong Post ID!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     if (!isset($data['grid_id']) || intval($data['grid_id']) == 0) {
                         Essential_Grid::ajaxResponseError(__('Please save the grid first to use this feature!', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     $visibility = json_decode(get_post_meta($data['post_id'], 'eg_visibility', true), true);
                     $found = false;
                     if (!empty($visibility) && is_array($visibility)) {
                         foreach ($visibility as $grid => $setting) {
                             if ($grid == $data['grid_id']) {
                                 if ($setting == false) {
                                     $visibility[$grid] = true;
                                 } else {
                                     $visibility[$grid] = false;
                                 }
                                 $found = true;
                                 break;
                             }
                         }
                     }
                     if (!$found) {
                         $visibility[$data['grid_id']] = false;
                     }
                     $visibility = json_encode($visibility);
                     update_post_meta($data['post_id'], 'eg_visibility', $visibility);
                     self::check_for_transient_deletion($data['post_id']);
                     Essential_Grid::ajaxResponseSuccess(__("Visibility of Post for this Grid changed!", EG_TEXTDOMAIN), array());
                     break;
                 case 'get_image_by_id':
                     if (!isset($data['img_id']) || intval($data['img_id']) == 0) {
                         $error = __('Wrong Image ID given', EG_TEXTDOMAIN);
                     } else {
                         $img = wp_get_attachment_image_src($data['img_id'], 'full');
                         if ($img !== false) {
                             Essential_Grid::ajaxResponseSuccess('', array('url' => $img[0]));
                         } else {
                             $error = __('Image with given ID does not exist', EG_TEXTDOMAIN);
                         }
                     }
                     break;
                 case 'activate_purchase_code':
                     $result = false;
                     if (!empty($data['username']) && !empty($data['api_key']) && !empty($data['code'])) {
                         $result = Essential_Grid_Admin::check_purchase_verification($data);
                     } else {
                         $error = __('The API key, the Purchase Code and the Username need to be set!', EG_TEXTDOMAIN);
                     }
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__('Purchase Code Successfully Activated', EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl("", "", 'essential-' . Essential_Grid_Admin::VIEW_START)));
                     } else {
                         if ($result !== false) {
                             $error = $result;
                         } else {
                             $error = __('Purchase Code is invalid', EG_TEXTDOMAIN);
                         }
                         Essential_Grid::ajaxResponseError($error, false);
                         exit;
                     }
                     break;
                 case 'deactivate_purchase_code':
                     $result = Essential_Grid_Admin::do_purchase_deactivation($data);
                     if ($result === true) {
                         Essential_Grid::ajaxResponseSuccess(__('Successfully removed validation', EG_TEXTDOMAIN), array('data' => $result, 'is_redirect' => true, 'redirect_url' => self::getViewUrl("", "", 'essential-' . Essential_Grid_Admin::VIEW_START)));
                     } else {
                         if ($result !== false) {
                             $error = $result;
                         } else {
                             $error = __('Could not remove Validation!', EG_TEXTDOMAIN);
                         }
                         Essential_Grid::ajaxResponseError($error, false);
                         exit;
                     }
                     break;
                 case 'dismiss_notice':
                     update_option('tp_eg_valid-notice', 'false');
                     Essential_Grid::ajaxResponseSuccess('.');
                     break;
                 case 'import_default_post_data':
                     try {
                         require EG_PLUGIN_PATH . 'includes/assets/default-posts.php';
                         require EG_PLUGIN_PATH . 'includes/assets/default-grids-meta-fonts.php';
                         if (isset($json_tax)) {
                             $import_tax = new PunchPost();
                             $import_tax->import_taxonomies($json_tax);
                         }
                         //insert meta, grids & punchfonts
                         $im = new Essential_Grid_Import();
                         if (isset($tp_grid_meta_fonts)) {
                             $tp_grid_meta_fonts = json_decode($tp_grid_meta_fonts, true);
                             $grids = @$tp_grid_meta_fonts['grids'];
                             if (!empty($grids) && is_array($grids)) {
                                 $grids_imported = $im->import_grids($grids);
                             }
                             $custom_metas = @$tp_grid_meta_fonts['custom-meta'];
                             if (!empty($custom_metas) && is_array($custom_metas)) {
                                 $custom_metas_imported = $im->import_custom_meta($custom_metas);
                             }
                             $custom_fonts = @$tp_grid_meta_fonts['punch-fonts'];
                             if (!empty($custom_fonts) && is_array($custom_fonts)) {
                                 $custom_fonts_imported = $im->import_punch_fonts($custom_fonts);
                             }
                         }
                         if (isset($json_posts)) {
                             $import = new PunchPort();
                             $import->set_tp_import_posts($json_posts);
                             $import->import_custom_posts();
                         }
                         Essential_Grid::ajaxResponseSuccess(__('Demo data successfully imported', EG_TEXTDOMAIN), array());
                     } catch (Exception $d) {
                         $error = __('Something went wrong, please contact the developer', EG_TEXTDOMAIN);
                     }
                     break;
                 case 'export_data':
                     $export_grids = self::getPostVar('export-grids-id', false);
                     $export_skins = self::getPostVar('export-skins-id', false);
                     $export_elements = self::getPostVar('export-elements-id', false);
                     $export_navigation_skins = self::getPostVar('export-navigation-skins-id', false);
                     $export_global_styles = self::getPostVar('export-global-styles', false);
                     $export_custom_meta = self::getPostVar('export-custom-meta-handle', false);
                     $export_punch_fonts = self::getPostVar('export-punch-fonts-handle', false);
                     header('Content-Type: text/json');
                     header('Content-Disposition: attachment;filename=ess_grid.json');
                     ob_start();
                     $export = array();
                     $ex = new Essential_Grid_Export();
                     //export Grids
                     if (!empty($export_grids)) {
                         $export['grids'] = $ex->export_grids($export_grids);
                     }
                     //export Skins
                     if (!empty($export_skins)) {
                         $export['skins'] = $ex->export_skins($export_skins);
                     }
                     //export Elements
                     if (!empty($export_elements)) {
                         $export['elements'] = $ex->export_elements($export_elements);
                     }
                     //export Navigation Skins
                     if (!empty($export_navigation_skins)) {
                         $export['navigation-skins'] = $ex->export_navigation_skins($export_navigation_skins);
                     }
                     //export Custom Meta
                     if (!empty($export_custom_meta)) {
                         $export['custom-meta'] = $ex->export_custom_meta($export_custom_meta);
                     }
                     //export Punch Fonts
                     if (!empty($export_punch_fonts)) {
                         $export['punch-fonts'] = $ex->export_punch_fonts($export_punch_fonts);
                     }
                     //export Global Styles
                     if ($export_global_styles == 'on') {
                         $export['global-css'] = $ex->export_global_styles($export_global_styles);
                     }
                     echo json_encode($export);
                     $content = ob_get_contents();
                     ob_clean();
                     ob_end_clean();
                     echo $content;
                     exit;
                     break;
                 case 'import_data':
                     if (!isset($data['imports']) || empty($data['imports'])) {
                         Essential_Grid::ajaxResponseError(__('No data for import selected', EG_TEXTDOMAIN), false);
                         exit;
                     }
                     try {
                         $im = new Essential_Grid_Import();
                         $temp_d = @$data['imports'];
                         unset($temp_d['data-grids']);
                         unset($temp_d['data-skins']);
                         unset($temp_d['data-elements']);
                         unset($temp_d['data-navigation-skins']);
                         unset($temp_d['data-global-css']);
                         $im->set_overwrite_data($temp_d);
                         //set overwrite data global to class
                         $skins = @$data['imports']['data-skins'];
                         if (!empty($skins) && is_array($skins)) {
                             foreach ($skins as $key => $skin) {
                                 $tskin = json_decode(stripslashes($skin), true);
                                 if (empty($tskin)) {
                                     $tskin = json_decode($skin, true);
                                 }
                                 $skins[$key] = $tskin;
                             }
                             if (!empty($skins)) {
                                 $skins_ids = @$data['imports']['import-skins-id'];
                                 $skins_imported = $im->import_skins($skins, $skins_ids);
                             }
                         }
                         $navigation_skins = @$data['imports']['data-navigation-skins'];
                         if (!empty($navigation_skins) && is_array($navigation_skins)) {
                             foreach ($navigation_skins as $key => $navigation_skin) {
                                 $tnavigation_skin = json_decode(stripslashes($navigation_skin), true);
                                 if (empty($tnavigation_skin)) {
                                     $tnavigation_skin = json_decode($navigation_skin, true);
                                 }
                                 $navigation_skins[$key] = $tnavigation_skin;
                             }
                             if (!empty($navigation_skins)) {
                                 $navigation_skins_ids = @$data['imports']['import-navigation-skins-id'];
                                 $navigation_skins_imported = $im->import_navigation_skins(@$navigation_skins, $navigation_skins_ids);
                             }
                         }
                         $grids = @$data['imports']['data-grids'];
                         if (!empty($grids) && is_array($grids)) {
                             foreach ($grids as $key => $grid) {
                                 $tgrid = json_decode(stripslashes($grid), true);
                                 if (empty($tgrid)) {
                                     $tgrid = json_decode($grid, true);
                                 }
                                 $grids[$key] = $tgrid;
                             }
                             if (!empty($grids)) {
                                 $grids_ids = @$data['imports']['import-grids-id'];
                                 $grids_imported = $im->import_grids($grids, $grids_ids);
                             }
                         }
                         $elements = @$data['imports']['data-elements'];
                         if (!empty($elements) && is_array($elements)) {
                             foreach ($elements as $key => $element) {
                                 $telement = json_decode(stripslashes($element), true);
                                 if (empty($telement)) {
                                     $telement = json_decode($element, true);
                                 }
                                 $elements[$key] = $telement;
                             }
                             if (!empty($elements)) {
                                 $elements_ids = @$data['imports']['import-elements-id'];
                                 $elements_imported = $im->import_elements(@$elements, $elements_ids);
                             }
                         }
                         $custom_metas = @$data['imports']['data-custom-meta'];
                         if (!empty($custom_metas) && is_array($custom_metas)) {
                             foreach ($custom_metas as $key => $custom_meta) {
                                 $tcustom_meta = json_decode(stripslashes($custom_meta), true);
                                 if (empty($tcustom_meta)) {
                                     $tcustom_meta = json_decode($custom_meta, true);
                                 }
                                 $custom_metas[$key] = $tcustom_meta;
                             }
                             if (!empty($custom_metas)) {
                                 $custom_metas_handle = @$data['imports']['import-custom-meta-handle'];
                                 $custom_metas_imported = $im->import_custom_meta($custom_metas, $custom_metas_handle);
                             }
                         }
                         $custom_fonts = @$data['imports']['data-punch-fonts'];
                         if (!empty($custom_fonts) && is_array($custom_fonts)) {
                             foreach ($custom_fonts as $key => $custom_font) {
                                 $tcustom_font = json_decode(stripslashes($custom_font), true);
                                 if (empty($tcustom_font)) {
                                     $tcustom_font = json_decode($custom_font, true);
                                 }
                                 $custom_fonts[$key] = $tcustom_font;
                             }
                             if (!empty($custom_fonts)) {
                                 $custom_fonts_handle = @$data['imports']['import-punch-fonts-handle'];
                                 $custom_fonts_imported = $im->import_punch_fonts($custom_fonts, $custom_fonts_handle);
                             }
                         }
                         if (@$data['imports']['import-global-styles'] == 'on') {
                             $global_css = @$data['imports']['data-global-css'];
                             $tglobal_css = stripslashes($global_css);
                             if (empty($tglobal_css)) {
                                 $tglobal_css = $global_css;
                             }
                             $global_styles_imported = $im->import_global_styles($tglobal_css);
                         }
                         Essential_Grid::ajaxResponseSuccess(__('Successfully imported data', EG_TEXTDOMAIN), array('is_redirect' => true, 'redirect_url' => self::getViewUrl("", "", 'essential-' . Essential_Grid_Admin::VIEW_START)));
                     } catch (Exception $d) {
                         $error = __('Something went wrong, please contact the developer', EG_TEXTDOMAIN);
                     }
                     break;
                 case 'delete_full_cache':
                     $lang = array();
                     if (Essential_Grid_Wpml::is_wpml_exists()) {
                         $lang = icl_get_languages();
                     }
                     $grids = Essential_Grid::get_essential_grids();
                     if (!empty($grids)) {
                         foreach ($grids as $grid) {
                             if (!empty($lang)) {
                                 foreach ($lang as $code => $val) {
                                     delete_transient('ess_grid_trans_query_' . $grid->id . $val['language_code']);
                                     delete_transient('ess_grid_trans_full_grid_' . $grid->id . $val['language_code']);
                                 }
                             } else {
                                 delete_transient('ess_grid_trans_query_' . $grid->id);
                                 delete_transient('ess_grid_trans_full_grid_' . $grid->id);
                             }
                         }
                     }
                     Essential_Grid::ajaxResponseSuccess(__('Successfully deleted all cache', EG_TEXTDOMAIN), array());
                     break;
                 case "get_image_url":
                     if (isset($data['imageid']) && intval($data['imageid']) > 0) {
                         $img_atts = wp_get_attachment_image_src($data['imageid']);
                         if ($img_atts !== false) {
                             $img_src = $img_atts[0];
                             Essential_Grid::ajaxResponseSuccess(__("Image URL found", EG_TEXTDOMAIN), array('url' => $img_src, 'imageid' => $data['imageid']));
                         }
                     }
                     $error = __('No correct image ID given', EG_TEXTDOMAIN);
                     break;
                 case "toggle_grid_favorite":
                     if (isset($data['id']) && intval($data['id']) > 0) {
                         $return = self::toggle_favorite_by_id($data['id']);
                         if ($return === true) {
                             Essential_Grid::ajaxResponseSuccess(__("Favorite Set", EG_TEXTDOMAIN));
                         } else {
                             $error = $return;
                         }
                     } else {
                         $error = __('No ID given', EG_TEXTDOMAIN);
                     }
                     break;
                 case "subscribe_to_newsletter":
                     if (isset($data['email']) && !empty($data['email'])) {
                         $return = ThemePunch_Newsletter::subscribe($data['email']);
                         if ($return !== false) {
                             if (!isset($return['status']) || $return['status'] === 'error') {
                                 $error = isset($return['message']) && !empty($return['message']) ? $return['message'] : __('Invalid Email', EG_TEXTDOMAIN);
                             } else {
                                 Essential_Grid::ajaxResponseSuccess(__("Success! Please check your Emails to finish the subscribtion", EG_TEXTDOMAIN), $return);
                             }
                         } else {
                             $error = __('Invalid Email/Could not connect to the Newsletter server', EG_TEXTDOMAIN);
                         }
                     } else {
                         $error = __('No Email given', EG_TEXTDOMAIN);
                     }
                     break;
                 case "unsubscribe_to_newsletter":
                     if (isset($data['email']) && !empty($data['email'])) {
                         $return = ThemePunch_Newsletter::unsubscribe($data['email']);
                         if ($return !== false) {
                             if (!isset($return['status']) || $return['status'] === 'error') {
                                 $error = isset($return['message']) && !empty($return['message']) ? $return['message'] : __('Invalid Email', EG_TEXTDOMAIN);
                             } else {
                                 Essential_Grid::ajaxResponseSuccess(__("Success! Please check your Emails to finish the process", EG_TEXTDOMAIN), $return);
                             }
                         } else {
                             $error = __('Invalid Email/Could not connect to the Newsletter server', EG_TEXTDOMAIN);
                         }
                     } else {
                         $error = __('No Email given', EG_TEXTDOMAIN);
                     }
                     break;
                 default:
                     $error = true;
                     break;
             }
         } else {
             $error = true;
         }
         if ($error !== false) {
             $showError = __("Wrong Request!", EG_TEXTDOMAIN);
             if ($error !== true) {
                 $showError = __("Ajax Error: ", EG_TEXTDOMAIN) . $error;
             }
             Essential_Grid::ajaxResponseError($showError, false);
         }
         exit;
     } catch (Exception $e) {
         exit;
     }
 }
예제 #5
0
 /**
  * Output by posts
  */
 public function output_by_posts($grid_preview = false)
 {
     global $sitepress;
     $post_limit = 99999;
     $base = new Essential_Grid_Base();
     $navigation_c = new Essential_Grid_Navigation($this->grid_id);
     $meta_c = new Essential_Grid_Meta();
     $item_skin = new Essential_Grid_Item_Skin();
     $item_skin->grid_id = $this->grid_id;
     $item_skin->set_grid_type($base->getVar($this->grid_params, 'layout', 'even'));
     $item_skin->set_default_image_by_id($base->getVar($this->grid_postparams, 'default-image', 0, 'i'));
     $m = new Essential_Grid_Meta();
     $skins_html = '';
     $skins_css = '';
     $filters = array();
     $rows_unlimited = $base->getVar($this->grid_params, 'rows-unlimited', 'on');
     $load_more = $base->getVar($this->grid_params, 'load-more', 'none');
     $load_more_start = $base->getVar($this->grid_params, 'load-more-start', 3, 'i');
     if ($rows_unlimited == 'on' && $load_more !== 'none' && $grid_preview == false) {
         //grid_preview means disable load more in preview
         $post_limit = $load_more_start;
     }
     $start_sortby = $base->getVar($this->grid_params, 'sorting-order-by-start', 'none');
     $start_sortby_type = $base->getVar($this->grid_params, 'sorting-order-type', 'ASC');
     $post_category = $base->getVar($this->grid_postparams, 'post_category');
     $post_types = $base->getVar($this->grid_postparams, 'post_types');
     $page_ids = explode(',', $base->getVar($this->grid_postparams, 'selected_pages', '-1'));
     $cat_relation = $base->getVar($this->grid_postparams, 'category-relation', 'OR');
     $max_entries = $this->get_maximum_entries($this);
     $additional_query = $base->getVar($this->grid_postparams, 'additional-query', '');
     if ($additional_query !== '') {
         $additional_query = wp_parse_args($additional_query);
     }
     $cat_tax = array('cats' => '', 'tax' => '');
     if ($this->custom_posts !== null) {
         //output by specific set posts
         $posts = Essential_Grid_Base::get_posts_by_ids($this->custom_posts, $start_sortby, $start_sortby_type);
         $cat_tax_obj = Essential_Grid_Base::get_categories_by_posts($posts);
         if (!empty($cat_tax_obj)) {
             $cat_tax['cats'] = Essential_Grid_Base::translate_categories_to_string($cat_tax_obj);
         }
         //$cat_tax = Essential_Grid_Base::getCatAndTaxData($post_category); //get cats by posts
     } elseif ($this->custom_special !== null) {
         //output by some special rule
         $max_entries = intval($base->getVar($this->grid_params, 'max-entries', '20'));
         if ($max_entries == 0) {
             $max_entries = 20;
         }
         switch ($this->custom_special) {
             case 'related':
                 $posts = Essential_Grid_Base::get_related_posts($max_entries);
                 break;
             case 'popular':
                 $posts = Essential_Grid_Base::get_popular_posts($max_entries);
                 break;
             case 'latest':
             default:
                 $posts = Essential_Grid_Base::get_latest_posts($max_entries);
                 break;
         }
         $cat_tax_obj = Essential_Grid_Base::get_categories_by_posts($posts);
         if (!empty($cat_tax_obj)) {
             $cat_tax['cats'] = Essential_Grid_Base::translate_categories_to_string($cat_tax_obj);
         }
         //$cat_tax = Essential_Grid_Base::getCatAndTaxData($post_category);  //get cats by posts
     } else {
         //output with the grid settings from an existing grid
         $cat_tax = Essential_Grid_Base::getCatAndTaxData($post_category);
         $posts = Essential_Grid_Base::getPostsByCategory($this->grid_id, $cat_tax['cats'], $post_types, $cat_tax['tax'], $page_ids, $start_sortby, $start_sortby_type, $max_entries, $additional_query, true, $cat_relation);
     }
     $nav_layout = $base->getVar($this->grid_params, 'navigation-layout', array());
     $nav_skin = $base->getVar($this->grid_params, 'navigation-skin', 'minimal-light');
     $hover_animation = $base->getVar($this->grid_params, 'hover-animation', 'fade');
     $filter_allow = $base->getVar($this->grid_params, 'filter-arrows', 'single');
     $filter_start = $base->getVar($this->grid_params, 'filter-start', '');
     $nav_type = $base->getVar($this->grid_params, 'nagivation-type', 'internal');
     $do_nav = $nav_type == 'internal' ? true : false;
     $order_by = explode(',', $base->getVar($this->grid_params, 'sorting-order-by', 'date'));
     if (!is_array($order_by)) {
         $order_by = array($order_by);
     }
     $order_by_start = $base->getVar($this->grid_params, 'sorting-order-by-start', 'none');
     if (strpos($order_by_start, 'eg-') === 0 || strpos($order_by_start, 'egl-') === 0) {
         //add meta at the end for meta sorting
         //if essential Meta, replace to meta name. Else -> replace - and _ with space, set each word uppercase
         $metas = $m->get_all_meta();
         $f = false;
         if (!empty($metas)) {
             foreach ($metas as $meta) {
                 if ('eg-' . $meta['handle'] == $order_by_start || 'egl-' . $meta['handle'] == $order_by_start) {
                     $f = true;
                     $order_by_start = $meta['name'];
                     break;
                 }
             }
         }
         if ($f === false) {
             $order_by_start = ucwords(str_replace(array('-', '_'), array(' ', ' '), $order_by_start));
         }
     }
     $sort_by_text = $base->getVar($this->grid_params, 'sort-by-text', __('Sort By ', EG_TEXTDOMAIN));
     $search_text = $base->getVar($this->grid_params, 'search-text', __('Search...', EG_TEXTDOMAIN));
     $module_spacings = $base->getVar($this->grid_params, 'module-spacings', '5');
     $top_1_align = $base->getVar($this->grid_params, 'top-1-align', 'center');
     $top_2_align = $base->getVar($this->grid_params, 'top-2-align', 'center');
     $bottom_1_align = $base->getVar($this->grid_params, 'bottom-1-align', 'center');
     $bottom_2_align = $base->getVar($this->grid_params, 'bottom-2-align', 'center');
     $top_1_margin = $base->getVar($this->grid_params, 'top-1-margin-bottom', 0, 'i');
     $top_2_margin = $base->getVar($this->grid_params, 'top-2-margin-bottom', 0, 'i');
     $bottom_1_margin = $base->getVar($this->grid_params, 'bottom-1-margin-top', 0, 'i');
     $bottom_2_margin = $base->getVar($this->grid_params, 'bottom-2-margin-top', 0, 'i');
     $left_margin = $base->getVar($this->grid_params, 'left-margin-left', 0, 'i');
     $right_margin = $base->getVar($this->grid_params, 'right-margin-right', 0, 'i');
     $nav_styles['top-1'] = array('margin-bottom' => $top_1_margin . 'px', 'text-align' => $top_1_align);
     $nav_styles['top-2'] = array('margin-bottom' => $top_2_margin . 'px', 'text-align' => $top_2_align);
     $nav_styles['left'] = array('margin-left' => $left_margin . 'px');
     $nav_styles['right'] = array('margin-right' => $right_margin . 'px');
     $nav_styles['bottom-1'] = array('margin-top' => $bottom_1_margin . 'px', 'text-align' => $bottom_1_align);
     $nav_styles['bottom-2'] = array('margin-top' => $bottom_2_margin . 'px', 'text-align' => $bottom_2_align);
     $ajax_container_position = $base->getVar($this->grid_params, 'ajax-container-position', 'top');
     if ($do_nav) {
         //only do if internal is selected
         $navigation_c->set_special_class('esg-fgc-' . $this->grid_id);
         $filters_meta = array();
         foreach ($this->grid_params as $gkey => $gparam) {
             if (strpos($gkey, 'filter-selected') === false) {
                 continue;
             }
             $fil_id = intval(str_replace('filter-selected-', '', $gkey));
             $fil_id = $fil_id == 0 ? '' : '-' . $fil_id;
             $filters_arr = array();
             $filters_arr['filter' . $fil_id]['filter-grouping'] = $base->getVar($this->grid_params, 'filter-grouping' . $fil_id, 'false');
             $filters_arr['filter' . $fil_id]['filter-listing'] = $base->getVar($this->grid_params, 'filter-listing' . $fil_id, 'list');
             $filters_arr['filter' . $fil_id]['filter-selected'] = $base->getVar($this->grid_params, 'filter-selected' . $fil_id, array());
             $filter_all_text = $base->getVar($this->grid_params, 'filter-all-text' . $fil_id, __('Filter - All', EG_TEXTDOMAIN));
             $filter_dropdown_text = $base->getVar($this->grid_params, 'filter-dropdown-text' . $fil_id, __('Filter Categories', EG_TEXTDOMAIN));
             $show_count = $base->getVar($this->grid_params, 'filter-counter' . $fil_id, 'off');
             if (!empty($filters_arr['filter' . $fil_id]['filter-selected'])) {
                 if (!empty($posts) && count($posts) > 0) {
                     foreach ($filters_arr['filter' . $fil_id]['filter-selected'] as $fk => $filter) {
                         if (strpos($filter, 'meta-') === 0) {
                             unset($filters_arr['filter' . $fil_id]['filter-selected'][$fk]);
                             //delete entry
                             foreach ($posts as $key => $post) {
                                 $fil = str_replace('meta-', '', $filter);
                                 $post_filter_meta = $meta_c->get_meta_value_by_handle($post['ID'], 'eg-' . $fil);
                                 $arr = json_decode($post_filter_meta, true);
                                 $cur_filter = is_array($arr) ? $arr : array($post_filter_meta);
                                 //$cur_filter = explode(',', $post_filter_meta);
                                 $add_filter = array();
                                 if (!empty($cur_filter)) {
                                     foreach ($cur_filter as $k => $v) {
                                         if (trim($v) !== '') {
                                             $add_filter[sanitize_key($v)] = array('name' => $v, 'slug' => sanitize_key($v), 'parent' => '0');
                                             if (!empty($filters_arr['filter' . $fil_id]['filter-selected'])) {
                                                 $filter_found = false;
                                                 foreach ($filters_arr['filter' . $fil_id]['filter-selected'] as $fcheck) {
                                                     if ($fcheck == sanitize_key($v)) {
                                                         $filter_found = true;
                                                         break;
                                                     }
                                                 }
                                                 if (!$filter_found) {
                                                     $filters_arr['filter' . $fil_id]['filter-selected'][] = sanitize_key($v);
                                                     //add found meta
                                                 }
                                             } else {
                                                 $filters_arr['filter' . $fil_id]['filter-selected'][] = sanitize_key($v);
                                                 //add found meta
                                             }
                                         }
                                     }
                                     $filters_meta = $filters_meta + $add_filter;
                                     if (!empty($add_filter)) {
                                         $navigation_c->set_filter($add_filter);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
             $navigation_c->set_filter_settings('filter' . $fil_id, $filters_arr['filter' . $fil_id]);
             $navigation_c->set_filter_text($filter_all_text, $fil_id);
             $navigation_c->set_dropdown_text($filter_dropdown_text, $fil_id);
             $navigation_c->set_show_count($show_count, $fil_id);
         }
         $navigation_c->set_filter_type($filter_allow);
         $navigation_c->set_filter_start_select($filter_start);
         $navigation_c->set_specific_styles($nav_styles);
         $navigation_c->set_layout($nav_layout);
         //set the layout
         $navigation_c->set_orders($order_by);
         //set order of filter
         $navigation_c->set_orders_text($sort_by_text);
         //set order of filter
         $navigation_c->set_orders_start($order_by_start);
         //set order of filter
         $navigation_c->set_search_text($search_text);
     }
     $nav_filters = array();
     $taxes = array('post_tag');
     if (!empty($cat_tax['tax'])) {
         $taxes = explode(',', $cat_tax['tax']);
     }
     if (!empty($cat_tax['cats'])) {
         $cats = explode(',', $cat_tax['cats']);
         foreach ($cats as $key => $id) {
             if (Essential_Grid_Wpml::is_wpml_exists() && isset($sitepress)) {
                 $new_id = icl_object_id($id, 'category', true, $sitepress->get_default_language());
                 $cat = get_category($new_id);
             } else {
                 $cat = get_category($id);
             }
             if (is_object($cat)) {
                 $nav_filters[$id] = array('name' => $cat->cat_name, 'slug' => sanitize_key($cat->slug), 'parent' => $cat->category_parent);
             }
             foreach ($taxes as $custom_tax) {
                 $term = get_term_by('id', $id, $custom_tax);
                 if (is_object($term)) {
                     $nav_filters[$id] = array('name' => $term->name, 'slug' => sanitize_key($term->slug), 'parent' => $term->parent);
                 }
             }
         }
         if (!empty($filters_meta)) {
             $nav_filters = $filters_meta + $nav_filters;
         }
         asort($nav_filters);
     }
     $item_skin->init_by_id($base->getVar($this->grid_params, 'entry-skin', 0, 'i'));
     $lazy_load = $base->getVar($this->grid_params, 'lazy-loading', 'off');
     if ($lazy_load == 'on') {
         $item_skin->set_lazy_load(true);
     }
     $default_media_source_order = $base->getVar($this->grid_postparams, 'media-source-order', '');
     $item_skin->set_default_media_source_order($default_media_source_order);
     $default_lightbox_source_order = $base->getVar($this->grid_params, 'lb-source-order', '');
     $item_skin->set_default_lightbox_source_order($default_lightbox_source_order);
     $default_aj_source_order = $base->getVar($this->grid_params, 'aj-source-order', '');
     $item_skin->set_default_ajax_source_order($default_aj_source_order);
     $lightbox_mode = $base->getVar($this->grid_params, 'lightbox-mode', 'single');
     $lightbox_include_media = $base->getVar($this->grid_params, 'lightbox-exclude-media', 'off');
     $post_media_source_type = $base->getVar($this->grid_postparams, 'image-source-type', 'full');
     $default_video_poster_order = $base->getVar($this->grid_params, 'poster-source-order', '');
     $item_skin->set_default_video_poster_order($default_video_poster_order);
     $layout = $base->getVar($this->grid_params, 'layout', 'even');
     $layout_sizing = $base->getVar($this->grid_params, 'layout-sizing', 'boxed');
     if ($layout_sizing !== 'fullwidth' && $layout == 'masonry') {
         $item_skin->set_poster_cropping(true);
     }
     $found_filter = array();
     $i = 1;
     if ($lightbox_mode == 'content' || $lightbox_mode == 'content-gallery' || $lightbox_mode == 'woocommerce-gallery') {
         $item_skin->set_lightbox_rel('ess-' . $this->grid_id);
     }
     if (!empty($posts) && count($posts) > 0) {
         foreach ($posts as $key => $post) {
             if ($grid_preview == false) {
                 //check if post should be visible or if its invisible on current grid settings
                 $is_visible = $this->check_if_visible($post['ID'], $this->grid_id);
                 if ($is_visible == false) {
                     continue;
                 }
                 // continue if invisible
             }
             $post_media_source_data = $base->get_post_media_source_data($post['ID'], $post_media_source_type);
             $post_video_ratios = $m->get_post_video_ratios($post['ID']);
             $filters = array();
             //$categories = get_the_category($post['ID']);
             $categories = $base->get_custom_taxonomies_by_post_id($post['ID']);
             //$tags = wp_get_post_terms($post['ID']);
             $tags = get_the_tags($post['ID']);
             if (!empty($categories)) {
                 foreach ($categories as $key => $category) {
                     $filters[$category->term_id] = array('name' => $category->name, 'slug' => sanitize_key($category->slug), 'parent' => $category->parent);
                 }
             }
             if (!empty($tags)) {
                 foreach ($tags as $key => $taxonomie) {
                     $filters[$taxonomie->term_id] = array('name' => $taxonomie->name, 'slug' => sanitize_key($taxonomie->slug), 'parent' => '0');
                 }
             }
             $filter_meta_selected = $base->getVar($this->grid_params, 'filter-selected', array());
             if (!empty($filter_meta_selected)) {
                 foreach ($filter_meta_selected as $filter) {
                     if (strpos($filter, 'meta-') === 0) {
                         $fil = str_replace('meta-', '', $filter);
                         $post_filter_meta = $meta_c->get_meta_value_by_handle($post['ID'], 'eg-' . $fil);
                         $arr = json_decode($post_filter_meta, true);
                         $cur_filter = is_array($arr) ? $arr : array($post_filter_meta);
                         //$cur_filter = explode(',', $post_filter_meta);
                         if (!empty($cur_filter)) {
                             foreach ($cur_filter as $k => $v) {
                                 if (trim($v) !== '') {
                                     $filters[sanitize_key($v)] = array('name' => $v, 'slug' => sanitize_key($v), 'parent' => '0');
                                 }
                             }
                         }
                     }
                 }
             }
             if (is_array($order_by) && !empty($order_by)) {
                 $sort = $this->prepare_sorting_array_by_post($post, $order_by);
                 $item_skin->set_sorting($sort);
             }
             $found_filter = $found_filter + $filters;
             //these are the found filters, only show filter that the posts have
             //switch to different skin
             $use_item_skin_id = json_decode(get_post_meta($post['ID'], 'eg_use_skin', true), true);
             if ($use_item_skin_id !== false && isset($use_item_skin_id[$this->grid_id]['use-skin'])) {
                 $use_item_skin_id = $use_item_skin_id[$this->grid_id]['use-skin'];
             } else {
                 $use_item_skin_id = -1;
             }
             $use_item_skin_id = apply_filters('essgrid_modify_post_item_skin', $use_item_skin_id, $post, $this->grid_id);
             $item_skin->switch_item_skin($use_item_skin_id);
             $item_skin->register_layer_css();
             $item_skin->register_skin_css();
             if ($i > $post_limit) {
                 $this->load_more_post_array[$post['ID']] = $filters;
                 //set for load more, only on elements that will not be loaded from beginning
                 continue;
                 //Load only selected numbers of items at start (for load more)
             }
             $i++;
             if ($lightbox_mode == 'content' || $lightbox_mode == 'content-gallery' || $lightbox_mode == 'woocommerce-gallery') {
                 switch ($lightbox_mode) {
                     case 'content':
                         $lb_add_images = $base->get_all_content_images($post['ID']);
                         break;
                     case 'content-gallery':
                         $lb_add_images = $base->get_all_gallery_images($post['post_content'], true);
                         break;
                     case 'woocommerce-gallery':
                         $lb_add_images = array();
                         if (Essential_Grid_Woocommerce::is_woo_exists()) {
                             $lb_add_images = Essential_Grid_Woocommerce::get_image_attachements($post['ID'], true);
                         }
                         break;
                 }
                 $item_skin->set_lightbox_addition(array('items' => $lb_add_images, 'base' => $lightbox_include_media));
             }
             $item_skin->set_filter($filters);
             $item_skin->set_media_sources($post_media_source_data);
             $item_skin->set_media_sources_type($post_media_source_type);
             $item_skin->set_video_ratios($post_video_ratios);
             $item_skin->set_post_values($post);
             ob_start();
             $item_skin->output_item_skin($grid_preview);
             $skins_html .= ob_get_contents();
             ob_clean();
             ob_end_clean();
             if ($grid_preview == false) {
                 ob_start();
                 $item_skin->output_element_css_by_meta();
                 $skins_css .= ob_get_contents();
                 ob_clean();
                 ob_end_clean();
             }
         }
     } else {
         return false;
     }
     $remove_filter = array_diff_key($nav_filters, $found_filter);
     //check if we have filter that no post has (comes through multilanguage)
     if (!empty($remove_filter)) {
         foreach ($remove_filter as $key => $rem) {
             //we have, so remove them from the filter list before setting the filter list
             unset($nav_filters[$key]);
         }
     }
     if ($do_nav) {
         //only do if internal is selected
         $navigation_c->set_filter($nav_filters);
         //set filters $nav_filters $found_filter
         $navigation_c->set_filter_type($filter_allow);
         $navigation_c->set_filter_start_select($filter_start);
     }
     ob_start();
     $item_skin->generate_element_css();
     $skins_css .= ob_get_contents();
     ob_clean();
     ob_end_clean();
     if ($do_nav) {
         //only do if internal is selected
         $found_skin = array();
         $navigation_skin = $base->getVar($this->grid_params, 'navigation-skin', 'minimal-light');
         $navigation_special_skin = $base->getVar($this->grid_params, 'navigation-special-skin', array());
         ob_start();
         $navigation_c->output_navigation_skin($navigation_skin);
         $found_skin[$navigation_skin] = true;
         if (!empty($navigation_special_skin)) {
             foreach ($navigation_special_skin as $spec_skin) {
                 if (!isset($found_skin[$spec_skin])) {
                     $navigation_c->output_navigation_skin($spec_skin);
                     $found_skin[$spec_skin] = true;
                 }
             }
         }
         $nav_css = ob_get_contents();
         ob_clean();
         ob_end_clean();
         echo $nav_css;
     }
     echo $skins_css;
     if ($item_skin->ajax_loading == true && $ajax_container_position == 'top') {
         echo $this->output_ajax_container();
     }
     $this->output_wrapper_pre($grid_preview);
     if ($do_nav) {
         //only do if internal is selected
         $navigation_c->output_layout('top-1', $module_spacings);
         $navigation_c->output_layout('top-2', $module_spacings);
     }
     $this->output_grid_pre();
     echo $skins_html;
     $this->output_grid_post();
     if ($do_nav) {
         //only do if internal is selected
         $navigation_c->output_layout('bottom-1', $module_spacings);
         $navigation_c->output_layout('bottom-2', $module_spacings);
         $navigation_c->output_layout('left');
         $navigation_c->output_layout('right');
         //check if search was added. If yes, we also need to add the "Filter All" filter if not existing
         $navigation_c->check_for_search();
     }
     $this->output_wrapper_post();
     if ($item_skin->ajax_loading == true && $ajax_container_position == 'bottom') {
         echo $this->output_ajax_container();
     }
     $load_lightbox = $item_skin->do_lightbox_loading();
     if (!$grid_preview) {
         $this->output_grid_javascript($load_lightbox);
     }
 }
예제 #6
0
 /**
  * get post categories list assoc - id / title
  */
 private function cshero_get_categories_assoc($taxonomy = "category")
 {
     if (strpos($taxonomy, ",") !== false) {
         $arrTax = explode(",", $taxonomy);
         $arrCats = array();
         foreach ($arrTax as $tax) {
             $cats = $this->cshero_get_categories_assoc($tax);
             $arrCats = array_merge($arrCats, $cats);
         }
         return $arrCats;
     }
     //$cats = get_terms("category");
     $args = array("taxonomy" => $taxonomy);
     //Essential_Grid_Wpml::disable_language_filtering();
     $cats = get_categories($args);
     //Essential_Grid_Wpml::enable_language_filtering();
     $arrCats = array();
     foreach ($cats as $cat) {
         $numItems = $cat->count;
         $itemsName = "items";
         if ($numItems == 1) {
             $itemsName = "item";
         }
         $title = $cat->name . " ({$numItems} {$itemsName})";
         $id = $cat->cat_ID;
         $id = Essential_Grid_Wpml::get_id_from_lang_id($id, $cat->taxonomy);
         $arrCats[$id] = $title;
     }
     return $arrCats;
 }