* @copyright 2007-2019 PrestaShop SA * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) * International Registered Trademark & Property of PrestaShop SA */ namespace PrestaShop\Module\StFacetedSearch\Hook; use Language; use Tools; class FeatureValue extends AbstractHook { const AVAILABLE_HOOKS = [ 'actionFeatureValueSave', 'actionFeatureValueDelete', 'displayFeatureValueForm', 'displayFeatureValuePostProcess', ]; /** * After save feature value * * @param array $params */ public function actionFeatureValueSave(array $params) { if (empty($params['id_feature_value'])) { return; } //Removing all indexed language data for this attribute value id $this->database->execute( 'DELETE FROM ' . _DB_PREFIX_ . 'st_search_indexable_feature_value_lang_value WHERE `id_feature_value` = ' . (int) $params['id_feature_value'] ); foreach (Language::getLanguages(false) as $language) { $seoUrl = Tools::getValue('url_name_' . (int) $language['id_lang']); $metaTitle = Tools::getValue('meta_title_' . (int) $language['id_lang']); if (empty($seoUrl) && empty($metaTitle)) { continue; } $this->database->execute( 'INSERT INTO ' . _DB_PREFIX_ . 'st_search_indexable_feature_value_lang_value (`id_feature_value`, `id_lang`, `url_name`, `meta_title`) VALUES ( ' . (int) $params['id_feature_value'] . ', ' . (int) $language['id_lang'] . ', \'' . pSQL(Tools::link_rewrite($seoUrl)) . '\', \'' . pSQL($metaTitle, true) . '\')' ); } $this->module->invalidateLayeredFilterBlockCache(); } /** * After delete Feature value * * @param array $params */ public function actionFeatureValueDelete(array $params) { if (empty($params['id_feature_value'])) { return; } $this->database->execute( 'DELETE FROM ' . _DB_PREFIX_ . 'st_search_indexable_feature_value_lang_value WHERE `id_feature_value` = ' . (int) $params['id_feature_value'] ); /* $items = $this->database->executeS( 'SELECT `id_st_search_facet_item` FROM ' . _DB_PREFIX_ . 'st_search_facet_item WHERE `facet_type`="feat" AND `facet_item_k` = ' . (int) $params['id_feature_value'] ); if(is_array($items) && count($items)){ $ids = array(); foreach ($items as $value) { $ids[] = $value['id_st_search_facet_item']; } $this->database->execute( 'DELETE FROM ' . _DB_PREFIX_ . 'st_search_facet_item WHERE `id_st_search_facet_item` IN ' . implode(',', $ids) ); $this->database->execute( 'DELETE FROM ' . _DB_PREFIX_ . 'st_search_facet_item WHERE `id_st_search_facet_item` IN ' . implode(',', $ids) ); }*/ $this->module->invalidateLayeredFilterBlockCache(); } /** * Post process feature value * * @param array $params */ public function displayFeatureValuePostProcess(array $params) { $this->module->checkLinksRewrite($params); } /** * Display feature value form * * @param array $params * * @return string */ public function displayFeatureValueForm(array $params) { $values = []; if ($result = $this->database->executeS( 'SELECT `url_name`, `meta_title`, `id_lang` FROM ' . _DB_PREFIX_ . 'st_search_indexable_feature_value_lang_value WHERE `id_feature_value` = ' . (int) $params['id_feature_value'] )) { foreach ($result as $data) { $values[$data['id_lang']] = ['url_name' => $data['url_name'], 'meta_title' => $data['meta_title']]; } } $this->context->smarty->assign([ 'languages' => Language::getLanguages(false), 'default_form_language' => (int) $this->context->controller->default_form_language, 'values' => $values, ]); return $this->module->render('feature_value_form.tpl'); } }