* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) */ if (!defined('_PS_VERSION_')) { exit; } use PrestaShop\PrestaShop\Adapter\Presenter\Object\ObjectPresenter; use PrestaShop\PrestaShop\Core\Addon\Module\ModuleManagerBuilder; use PrestaShop\PrestaShop\Core\Module\WidgetInterface; require_once _PS_MODULE_DIR_ . 'ps_customtext/classes/CustomText.php'; class Ps_Customtext extends Module implements WidgetInterface { // Equivalent module on PrestaShop 1.6, sharing the same data const MODULE_16 = 'blockcmsinfo'; /** * @var string Template used by widget */ private $templateFile; public function __construct() { $this->name = 'ps_customtext'; $this->tab = 'front_office_features'; $this->author = 'PrestaShop'; $this->version = '4.2.1'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); Shop::addTableAssociation('info', ['type' => 'shop']); $this->displayName = $this->trans('Custom text block', [], 'Modules.Customtext.Admin'); $this->description = $this->trans('Give your visitors extra information, display a customized block of content on your homepage.', [], 'Modules.Customtext.Admin'); $this->ps_versions_compliancy = ['min' => '1.7.5.0', 'max' => _PS_VERSION_]; $this->templateFile = 'module:ps_customtext/ps_customtext.tpl'; } /** * @return bool */ public function install() { // Remove 1.6 equivalent module to avoid DB issues $moduleManagerBuilder = ModuleManagerBuilder::getInstance(); $moduleManager = $moduleManagerBuilder->build(); if ($moduleManager->isInstalled(self::MODULE_16)) { return $this->installFrom16Version(); } return $this->runInstallSteps() && $this->installFixtures(); } /** * @return bool */ public function runInstallSteps() { return parent::install() && $this->installDB() && $this->registerHook('displayHome') && $this->registerHook('actionShopDataDuplication'); } /** * @return bool */ public function installFrom16Version() { require_once _PS_MODULE_DIR_ . $this->name . '/classes/MigrateData.php'; $migration = new MigrateData(); $migration->retrieveOldData(); $oldModule = Module::getInstanceByName(self::MODULE_16); if ($oldModule) { $oldModule->uninstall(); } return $this->uninstallDB() && $this->runInstallSteps() && $migration->insertData(); } /** * @return bool */ public function uninstall() { return parent::uninstall() && $this->uninstallDB(); } /** * @return bool */ public function installDB() { $return = Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'info` ( `id_info` INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id_info`) ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8 ;' ); $return = $return && Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'info_shop` ( `id_info` INT(10) UNSIGNED NOT NULL, `id_shop` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id_info`, `id_shop`) ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8 ;' ); $return = $return && Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'info_lang` ( `id_info` INT UNSIGNED NOT NULL, `id_shop` INT(10) UNSIGNED NOT NULL, `id_lang` INT(10) UNSIGNED NOT NULL , `text` text NOT NULL, PRIMARY KEY (`id_info`, `id_lang`, `id_shop`) ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8 ;' ); return $return; } /** * @param bool $drop_table * * @return bool */ public function uninstallDB($drop_table = true) { if (!$drop_table) { return true; } return Db::getInstance()->execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'info`, `' . _DB_PREFIX_ . 'info_shop`, `' . _DB_PREFIX_ . 'info_lang`'); } /** * @return string */ public function getContent() { $output = ''; if (Tools::isSubmit('saveps_customtext')) { if (!Tools::getValue('text_' . (int) Configuration::get('PS_LANG_DEFAULT'), false)) { $output = $this->displayError($this->trans('Please fill out all fields.', [], 'Admin.Notifications.Error')); } else { $update = $this->processSaveCustomText(); if (!$update) { $output = '
' . $this->trans('An error occurred on saving.', [], 'Admin.Notifications.Error') . '
'; } $this->_clearCache($this->templateFile); if ($update) { Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules') . '&configure=' . $this->name . '&conf=4'); } } } return $output . $this->renderForm(); } /** * @return bool */ public function processSaveCustomText() { $shops = Tools::getValue('checkBoxShopAsso_configuration', [$this->context->shop->id]); $text = []; $languages = Language::getLanguages(false); foreach ($languages as $lang) { $text[$lang['id_lang']] = (string) Tools::getValue('text_' . $lang['id_lang']); if (!Configuration::get('PS_ALLOW_HTML_IFRAME') && preg_match('/<\/iframe>/isU', $text[$lang['id_lang']])) { $this->context->controller->errors[] = $this->trans('To use