bootstrap = true; $this->table = 'cookiesplus_finality'; $this->className = 'CookiesPlusFinality'; $this->tabClassName = 'AdminCookiesPlusFinalities'; $this->lang = true; $this->addRowAction('edit'); $this->addRowAction('delete'); parent::__construct(); $this->bulk_actions = [ 'delete' => [ 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), 'icon' => 'icon-trash', ], ]; $this->context = Context::getContext(); $this->default_form_language = $this->context->language->id; $this->position_identifier = 'position'; $this->fields_list = [ 'id_cookiesplus_finality' => [ 'title' => $this->l('ID'), 'search' => false, ], 'active' => [ 'title' => $this->l('Enabled'), 'active' => 'active', 'type' => 'bool', 'search' => false, ], 'name' => [ 'title' => $this->l('Cookie finality name'), 'filter_key' => 'b!name', 'search' => false, ], 'description' => [ 'title' => $this->l('Cookie finality description'), 'callback' => 'getFinalityDescriptionCallback', 'callback_object' => 'CookiesPlusFinality', 'search' => false, ], 'technical' => [ 'title' => $this->l('Technical'), 'align' => 'text-center', 'active' => 'technical', 'type' => 'bool', 'search' => false, ], 'position' => [ 'title' => $this->l('Position'), 'align' => 'center', 'class' => 'fixed-width-sm', 'position' => 'position', 'search' => false, ], ]; if (Shop::isFeatureActive() && (Shop::getContext() == Shop::CONTEXT_ALL || Shop::getContext() == Shop::CONTEXT_GROUP)) { $this->isShopSelected = false; } $this->shopLinkType = 'shop'; } public function setMedia($isNewTheme = false) { parent::setMedia($isNewTheme); $this->addJqueryPlugin(['typewatch', 'fancybox', 'autocomplete']); $this->addJqueryUI(['ui.datepicker', 'ui.button', 'ui.sortable', 'ui.droppable']); // Tabs /*if (version_compare(_PS_VERSION_, '1.6', '<')) { $this->addCSS(_MODULE_DIR_.$this->module->name.'/views/css/tabs.css'); } $this->addJS(_MODULE_DIR_ . $this->module->name . '/views/js/tabs.js'); */ $this->addCSS(_MODULE_DIR_ . $this->module->name . '/views/css/cookiesplus-back.css'); if ($this->display) { $this->addJS(_MODULE_DIR_ . $this->module->name . '/views/js/cookiesplus-back.js'); $this->addCSS(_MODULE_DIR_ . $this->module->name . '/lib/CodeMirror/lib/codemirror.css'); $this->addCSS(_MODULE_DIR_ . $this->module->name . '/lib/CodeMirror/theme/monokai.css'); $this->addJS(_MODULE_DIR_ . $this->module->name . '/lib/CodeMirror/lib/codemirror.js'); $this->addJS(_MODULE_DIR_ . $this->module->name . '/lib/CodeMirror/addon/display/autorefresh.js'); $this->addJS(_MODULE_DIR_ . $this->module->name . '/lib/CodeMirror/mode/css/css.js'); $this->addJS(_MODULE_DIR_ . $this->module->name . '/lib/CodeMirror/mode/javascript/javascript.js'); } } public function initContent() { if (!$this->isShopSelected && !$this->display) { $this->errors[] = $this->l('You have to select a shop.'); parent::initContent(); return; } if (version_compare($this->module->version, $this->module->getDatabaseVersion(), '>')) { return $this->errors[] = $this->l('Upgrade available'); } if ($this->isShopSelected && ( (version_compare(_PS_VERSION_, '1.5.0.13', '<') && !Module::isInstalled($this->module->name)) || (version_compare(_PS_VERSION_, '1.5.0.13', '>=') && !Module::isEnabled($this->module->name)) ) ) { $this->warnings[] = $this->l('Module is not enabled in this shop.'); } if ($warnings = $this->module->getWarnings(false)) { $this->warnings[] = $warnings; } if (Tools::isSubmit('submitCookiesPlusRevokeCookies')) { Configuration::updateValue('C_P_REVOKE_CONSENT', date('Y-m-d H:i:s', time())); $this->confirmations[] = $this->l('Revoke consent updated'); } parent::initContent(); $this->content .= $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/disclaimer.tpl'); if (!$this->display) { if (version_compare(_PS_VERSION_, '1.6', '>=')) { $default_iso_code = 'en'; $local_path = $this->module->getLocalPath(); $readme = null; if (file_exists($local_path . '/readme_' . $this->context->language->iso_code . '.pdf')) { $readme = 'readme_' . $this->context->language->iso_code . '.pdf'; } elseif (file_exists($local_path . '/readme_' . $default_iso_code . '.pdf')) { $readme = 'readme_' . $default_iso_code . '.pdf'; } $this->context->smarty->assign([ 'support_id' => $this->module->addons_id_product, 'readme' => $readme, 'this_path' => $this->module->getPathUri(), ]); if (file_exists($local_path . '/views/templates/admin/company/information_' . $this->context->language->iso_code . '.tpl')) { $this->content .= $this->context->smarty->fetch($local_path . '/views/templates/admin/company/information_' . $this->context->language->iso_code . '.tpl'); } elseif (file_exists($local_path . '/views/templates/admin/company/information_' . $default_iso_code . '.tpl')) { $this->content .= $this->context->smarty->fetch($local_path . '/views/templates/admin/company/information_' . $default_iso_code . '.tpl'); } } $this->context->smarty->assign([ 'content' => $this->content, ]); } } public function initProcess() { parent::initProcess(); if (Tools::isSubmit('activecookiesplus_finality') && $this->id_object) { $this->toggleProperty('active', $this->id_object); if (!$this->errors) { // Remove toggle from URL Tools::redirectAdmin(Context::getContext()->link->getAdminLink($this->tabClassName)); } } if (Tools::isSubmit('technicalcookiesplus_finality') && $this->id_object) { $this->toggleProperty('technical', $this->id_object); if (!$this->errors) { // Remove toggle from URL Tools::redirectAdmin(Context::getContext()->link->getAdminLink($this->tabClassName)); } } } public function toggleProperty($property, $id) { if (version_compare(_PS_VERSION_, '1.7', '<')) { if ($this->tabAccess['edit'] !== '1') { $this->errors[] = $this->l('You do not have permission to edit this.'); return; } } else { if (!$this->access('edit')) { $this->errors[] = $this->l('You do not have permission to edit this.'); return; } } $object = new $this->className($id); if (!Validate::isLoadedObject($object)) { $this->errors[] = $this->l('An error occurred while updating an object.'); } $object->$property = !$object->$property; if (!$object->save()) { $this->errors[] = $this->l('An error occurred while updating an object.'); } } public function initToolbar() { parent::initToolbar(); if (!$this->isShopSelected) { unset($this->toolbar_btn['new']); } } public function initPageHeaderToolbar() { parent::initPageHeaderToolbar(); if (empty($this->display)) { $this->page_header_toolbar_btn['desc-module-new'] = [ 'href' => 'index.php?controller=' . $this->tabClassName . '&add' . $this->table . '&token=' . Tools::getAdminTokenLite($this->tabClassName), 'desc' => $this->l('New'), 'icon' => 'process-icon-new', ]; } if (!$this->isShopSelected) { unset($this->page_header_toolbar_btn['desc-module-new']); } $this->context->smarty->clearAssign('help_link', ''); } public function initModal() { parent::initModal(); $languages = Language::getLanguages(false); $translateLinks = []; if (version_compare(_PS_VERSION_, '1.7.2.1', '>=')) { $module = Module::getInstanceByName($this->module->name); $isNewTranslateSystem = $module->isUsingNewTranslationSystem(); $link = Context::getContext()->link; foreach ($languages as $lang) { if ($isNewTranslateSystem) { $translateLinks[$lang['iso_code']] = $link->getAdminLink('AdminTranslationSf', true, [ 'lang' => $lang['iso_code'], 'type' => 'modules', 'selected' => $module->name, 'locale' => $lang['locale'], ]); } else { $translateLinks[$lang['iso_code']] = $link->getAdminLink('AdminTranslations', true, [], [ 'type' => 'modules', 'module' => $module->name, 'lang' => $lang['iso_code'], ]); } } } $this->context->smarty->assign([ 'trad_link' => 'index.php?tab=AdminTranslations&token=' . Tools::getAdminTokenLite('AdminTranslations') . '&type=modules&module=' . $this->module->name . '&lang=', 'module_languages' => $languages, 'module_name' => $this->module->name, 'translateLinks' => $translateLinks, ]); $modal_content = $this->context->smarty->fetch('controllers/modules/modal_translation.tpl'); $this->modals[] = [ 'modal_id' => 'moduleTradLangSelect', 'modal_class' => 'modal-sm', 'modal_title' => $this->l('Translate this module'), 'modal_content' => $modal_content, ]; } public function renderList() { // Redirect if no object created /*if ($this->isShopSelected && !LoyaltyEditPointsAssignment::getNbObjects()) { $this->redirect_after = 'index.php?controller='.$this->tabClassName.'&add'.$this->table.'&token='.Tools::getAdminTokenLite($this->tabClassName); $this->redirect(); }*/ $this->content .= $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/cookie-finalities.tpl'); $this->context->smarty->assign([ 'revokeConsentDate' => Tools::displayDate(date('Y-m-d H:i:s', strtotime(Configuration::get('C_P_REVOKE_CONSENT'))), null, true), ]); $this->content .= $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/revoke-consent.tpl'); return parent::renderList(); } public function renderForm() { if (!$this->isShopSelected && $this->display === 'add') { $this->errors[] = $this->l('You have to select a shop.'); return parent::renderForm(); } $this->context->smarty->assign([ 'revokeConsentDate' => Tools::displayDate(date('Y-m-d H:i:s', strtotime(Configuration::get('C_P_REVOKE_CONSENT'))), null, true), ]); $this->content .= $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/revoke-consent.tpl'); $object = $this->loadObject(true); $this->multiple_fieldsets = true; $this->default_form_language = $this->context->language->id; // Modules blocked $modules = $this->module->getModuleList(); $selectedModules = (array) json_decode($object->modules); foreach ($modules as &$module) { if (in_array($module['id_module'], $selectedModules)) { $module['checked'] = true; } else { $module['checked'] = false; } $module['sortDisplayName'] = strtolower($module['displayName']); } unset($module); array_multisort( array_column( $modules, 'checked' ), SORT_DESC, array_column( $modules, 'sortDisplayName' ), SORT_ASC, $modules ); $this->context->smarty->assign([ 'allModules' => $modules, 'fieldName' => 'modules', ]); $fieldsFormIndex = 0; $this->fields_form[$fieldsFormIndex]['form'] = [ 'legend' => [ 'title' => $this->l('Cookie finality'), 'icon' => 'icon-cogs', ], 'input' => [ [ 'type' => 'hidden', 'name' => 'id_cookiesplus_finality', ], [ 'type' => 'hidden', 'name' => 'position', ], [ 'type' => (version_compare(_PS_VERSION_, '1.6', '>=')) ? 'switch' : 'radio', 'label' => $this->l('Enabled'), 'name' => 'active', 'class' => 't', 'col' => 8, 'is_bool' => true, 'values' => [ [ 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Yes'), ], [ 'id' => 'active_off', 'value' => 0, 'label' => $this->l('No'), ], ], ], [ 'type' => (version_compare(_PS_VERSION_, '1.6', '>=')) ? 'switch' : 'radio', 'label' => $this->l('This is a Technical finality'), 'name' => 'technical', 'class' => 't', 'col' => 8, 'is_bool' => true, 'values' => [ [ 'id' => 'technical_on', 'value' => 1, 'label' => $this->l('Yes'), ], [ 'id' => 'technical_off', 'value' => 0, 'label' => $this->l('No'), ], ], 'desc' => $this->l('Technical cookies can not be disabled. They are installed automatically.'), ], [ 'type' => 'text', 'label' => $this->l('Cookie finality name'), 'name' => 'name', 'required' => true, 'lang' => true, ], [ 'type' => 'textarea', 'label' => $this->l('Cookie finality description'), 'name' => 'description', 'required' => true, 'lang' => true, 'autoload_rte' => true, 'cols' => 60, 'rows' => 30, ], [ 'type' => 'html', 'col' => 8, 'label' => $this->l('Cookies from this finality'), 'name' => $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/cookies-list.tpl') . $this->module->getCookiesPlusCookiesList(), ], [ 'type' => 'html', 'name' => 'html', 'html_content' => (Module::isInstalled('litespeedcache') || Module::isInstalled('stadvancedcache') || Module::isInstalled('jprestaspeedpack') || Module::isInstalled('pagecache')) ? '
' . $this->l('If you are using a cache module please clear cache when you make any modification.') . '
' : '', ], [ 'type' => 'html', 'col' => 8, 'label' => $this->l('Modules blocked'), 'name' => $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/configure_modules.tpl'), ], [ 'type' => 'textarea', 'label' => $this->l('Execute this JS script when this cookie finality is accepted'), 'name' => 'js_script', 'cols' => 100, 'rows' => 10, 'class' => 't codemirror codemirror-js', 'desc' => sprintf($this->l('Enclose the script between the %s%s tags'), htmlspecialchars('')), ], [ 'type' => 'textarea', 'label' => $this->l('Execute this JS script when this cookie finality is rejected'), 'name' => 'js_not_script', 'cols' => 100, 'rows' => 10, 'class' => 't codemirror codemirror-js', 'desc' => sprintf($this->l('Enclose the script between the %s%s tags'), htmlspecialchars('')), ], [ 'col' => 12, 'type' => 'html', 'label' => '', 'name' => $this->context->smarty->fetch($this->module->getLocalPath() . 'views/templates/admin/C_P_SCRIPT_BLOCK.tpl'), ], /* Used to override token field from previous helperlist */ [ 'type' => 'hidden', 'name' => 'token', ], ], 'submit' => [ 'title' => $this->l('Save'), 'type' => 'submit', ], 'buttons' => [ 'save-and-stay' => [ 'title' => $this->l('Save and stay'), 'name' => 'submitAdd' . $this->table . 'AndStay', 'type' => 'submit', 'class' => 'btn btn-default pull-right', 'icon' => 'process-icon-save', ], ], ]; $this->content .= parent::renderForm(); } public function processSave() { $_POST['modules'] = json_encode(Tools::getValue('modules')); $_POST['js_script'] = str_replace(['{literal}', '{/literal}'], '', Tools::getValue('js_script')); $_POST['js_not_script'] = str_replace(['{literal}', '{/literal}'], '', Tools::getValue('js_not_script')); return parent::processSave(); } protected function afterAdd($object) { // Warning: Declaration of AdminCookiesPlusFinalitiesController::afterAdd() should be compatible with AdminControllerCore::afterAdd($object) $cookiesPlusFinality = new CookiesPlusFinality((int) Tools::getValue('id_cookiesplus_finality')); $cookiesPlusFinality->position = $cookiesPlusFinality->getHigherPosition() + 1; $cookiesPlusFinality->save(); return true; } public function displayDeleteLink($token = null, $id = null, $name = null) { $tpl = $this->createTemplate('helpers/list/list_action_delete.tpl'); $tpl->assign([ 'href' => self::$currentIndex . '&' . $this->identifier . '=' . $id . '&delete' . $this->table . '&token=' . ($token != null ? $token : $this->token), 'confirm' => $this->l('Delete the selected item?') . $name, 'action' => $this->l('Delete'), 'id' => $id, ]); return $tpl->fetch(); } private function _createTemplate($tpl_name) { if ($this->override_folder) { if ($this->context->controller instanceof ModuleAdminController) { $override_tpl_path = $this->context->controller->getTemplatePath() . $tpl_name; } elseif ($this->module) { $override_tpl_path = _PS_MODULE_DIR_ . $this->module->name . '/views/templates/admin/' . $tpl_name; } elseif (file_exists($this->context->smarty->getTemplateDir(1) . DIRECTORY_SEPARATOR . $this->override_folder . $this->base_folder . $tpl_name)) { $override_tpl_path = $this->context->smarty->getTemplateDir(1) . DIRECTORY_SEPARATOR . $this->override_folder . $this->base_folder . $tpl_name; } elseif (file_exists($this->context->smarty->getTemplateDir(0) . DIRECTORY_SEPARATOR . 'controllers' . DIRECTORY_SEPARATOR . $this->override_folder . $this->base_folder . $tpl_name)) { $override_tpl_path = $this->context->smarty->getTemplateDir(0) . 'controllers' . DIRECTORY_SEPARATOR . $this->override_folder . $this->base_folder . $tpl_name; } } elseif ($this->module) { $override_tpl_path = _PS_MODULE_DIR_ . $this->module->name . '/views/templates/admin/' . $tpl_name; } if (isset($override_tpl_path) && file_exists($override_tpl_path)) { return $this->context->smarty->createTemplate($override_tpl_path, $this->context->smarty); } else { return $this->context->smarty->createTemplate($tpl_name, $this->context->smarty); } } public function ajaxProcessUpdatePositions() { $way = (int) Tools::getValue('way'); $id = (int) Tools::getValue('id'); $positions = Tools::getValue($this->table); foreach ($positions as $position => $value) { $pos = explode('_', $value); if (isset($pos[2]) && (int) $pos[2] === $id) { if ($conf = new CookiesPlusFinality((int) $pos[2])) { if (isset($position) && $conf->updatePosition($way, $position)) { echo 'ok position ' . (int) $position . ' for config ' . (int) $pos[1] . '\r\n'; } else { echo '{"hasError" : true, "errors" : "Can not update config ' . (int) $id . ' to position ' . (int) $position . ' "}'; } } else { echo '{"hasError" : true, "errors" : "This config (' . (int) $id . ') can not be loaded"}'; } break; } } } }