/home/sharedstore/.trash/modules/cz_offercmsblock
Edit: /home/sharedstore/.trash/modules/cz_offercmsblock/cz_offercmsblock.php (12655B)
* @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\Core\Module\WidgetInterface;
require_once _PS_MODULE_DIR_ . 'cz_offercmsblock/classes/OfferCmsBlock.php';
class Cz_Offercmsblock extends Module implements WidgetInterface
{
// Equivalent module on PrestaShop 1.6, sharing the same data
const MODULE_16 = 'blockcmsinfo';
private $templateFile;
public function __construct()
{
$this->name = 'cz_offercmsblock';
$this->tab = 'front_office_features';
$this->author = 'Codezeel';
$this->version = '4.1.1';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
Shop::addTableAssociation('czoffercmsblockinfo', ['type' => 'shop']);
$this->displayName = $this->trans('CZ - Offer CMS Block', [], 'Modules.OfferCmsBlock.Admin');
$this->description = $this->trans('Adds custom information block in your store', [], 'Modules.OfferCmsBlock.Admin');
$this->ps_versions_compliancy = ['min' => '1.7.4.0', 'max' => _PS_VERSION_];
$this->templateFile = 'module:cz_offercmsblock/views/templates/hook/cz_offercmsblock.tpl';
}
public function install()
{
// Remove 1.6 equivalent module to avoid DB issues
if (Module::isInstalled(self::MODULE_16)) {
return $this->installFrom16Version();
}
return $this->runInstallSteps()
&& $this->installFixtures();
}
public function runInstallSteps()
{
return parent::install()
&& $this->installDB()
&& $this->registerHook('displayHome')
&& $this->registerHook('actionShopDataDuplication');
}
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();
}
public function uninstall()
{
return parent::uninstall() && $this->uninstallDB();
}
public function installDB()
{
$return = true;
$return &= Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'czoffercmsblockinfo` (
`id_czoffercmsblockinfo` INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id_czoffercmsblockinfo`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8 ;'
);
$return &= Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'czoffercmsblockinfo_shop` (
`id_czoffercmsblockinfo` INT(10) UNSIGNED NOT NULL,
`id_shop` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id_czoffercmsblockinfo`, `id_shop`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8 ;'
);
$return &= Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'czoffercmsblockinfo_lang` (
`id_czoffercmsblockinfo` 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_czoffercmsblockinfo`, `id_lang`, `id_shop`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8 ;'
);
return $return;
}
public function uninstallDB($drop_table = true)
{
$ret = true;
if ($drop_table) {
$ret &= Db::getInstance()->execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'czoffercmsblockinfo`')
&& Db::getInstance()->execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'czoffercmsblockinfo_shop`')
&& Db::getInstance()->execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'czoffercmsblockinfo_lang`');
}
return $ret;
}
public function getContent()
{
$output = '';
if (Tools::isSubmit('savecz_offercmsblock')) {
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->processSaveOfferCmsBlock();
if (!$update) {
$output = '
'
. $this->trans('An error occurred on saving.', [], 'Admin.Notifications.Error')
. '
';
}
$this->_clearCache($this->templateFile);
}
}
return $output . $this->renderForm();
}
public function processSaveOfferCmsBlock()
{
$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']);
}
$saved = true;
foreach ($shops as $shop) {
Shop::setContext(Shop::CONTEXT_SHOP, $shop);
$czoffercmsblockinfo = new OfferCmsBlock(Tools::getValue('id_czoffercmsblockinfo', 1));
$czoffercmsblockinfo->text = $text;
$saved &= $czoffercmsblockinfo->save();
}
return $saved;
}
protected function renderForm()
{
$default_lang = (int) Configuration::get('PS_LANG_DEFAULT');
$fields_form = [
'tinymce' => true,
'legend' => [
'title' => $this->trans('CMS block', [], 'Modules.OfferCmsBlock.Admin'),
],
'input' => [
'id_info' => [
'type' => 'hidden',
'name' => 'id_czoffercmsblockinfo',
],
'content' => [
'type' => 'textarea',
'label' => $this->trans('Text block', [], 'Modules.OfferCmsBlock.Admin'),
'lang' => true,
'name' => 'text',
'cols' => 40,
'rows' => 10,
'class' => 'rte',
'autoload_rte' => true,
],
],
'submit' => [
'title' => $this->trans('Save', [], 'Admin.Actions'),
],
'buttons' => [
[
'href' => AdminController::$currentIndex . '&configure=' . $this->name . '&token=' . Tools::getAdminTokenLite('AdminModules'),
'title' => $this->trans('Back to list', [], 'Admin.Actions'),
'icon' => 'process-icon-back',
],
],
];
if (Shop::isFeatureActive() && Tools::getValue('id_czoffercmsblockinfo') == false) {
$fields_form['input'][] = [
'type' => 'shop',
'label' => $this->trans('Shop association', [], 'Admin.Global'),
'name' => 'checkBoxShopAsso_theme',
];
}
$helper = new HelperForm();
$helper->module = $this;
$helper->name_controller = 'cz_offercmsblock';
$helper->identifier = $this->identifier;
$helper->token = Tools::getAdminTokenLite('AdminModules');
foreach (Language::getLanguages(false) as $lang) {
$helper->languages[] = [
'id_lang' => $lang['id_lang'],
'iso_code' => $lang['iso_code'],
'name' => $lang['name'],
'is_default' => ($default_lang == $lang['id_lang'] ? 1 : 0),
];
}
$helper->currentIndex = AdminController::$currentIndex . '&configure=' . $this->name;
$helper->default_form_language = $default_lang;
$helper->allow_employee_form_lang = $default_lang;
$helper->toolbar_scroll = true;
$helper->title = $this->displayName;
$helper->submit_action = 'savecz_offercmsblock';
$helper->fields_value = $this->getFormValues();
return $helper->generateForm([['form' => $fields_form]]);
}
public function getFormValues()
{
$fields_value = [];
$idShop = $this->context->shop->id;
$idInfo = OfferCmsBlock::getOfferCmsBlockIdByShop($idShop);
Shop::setContext(Shop::CONTEXT_SHOP, $idShop);
$czoffercmsblockinfo = new OfferCmsBlock((int) $idInfo);
$fields_value['text'] = $czoffercmsblockinfo->text;
$fields_value['id_czoffercmsblockinfo'] = $idInfo;
return $fields_value;
}
public function renderWidget($hookName = null, array $configuration = [])
{
if (!$this->isCached($this->templateFile, $this->getCacheId('cz_offercmsblock'))) {
$this->smarty->assign($this->getWidgetVariables($hookName, $configuration));
}
return $this->fetch($this->templateFile, $this->getCacheId('cz_offercmsblock'));
}
public function getWidgetVariables($hookName = null, array $configuration = [])
{
$sql = 'SELECT * FROM `' . _DB_PREFIX_ . 'czoffercmsblockinfo_lang`
WHERE `id_lang` = ' . (int) $this->context->language->id . ' AND `id_shop` = ' . (int) $this->context->shop->id;
return [
'czoffercmsblockinfos' => Db::getInstance()->getRow($sql),
];
}
public function installFixtures()
{
$return = true;
$tabTexts = [
[
'text' => '
Free Shipping
Free Delivery Now On Your First Order and over $200
- Only $200*
'
],
];
$shopsIds = Shop::getShops(true, null, true);
$languages = Language::getLanguages(false);
$text = [];
foreach ($tabTexts as $tab) {
$czoffercmsblockinfo = new OfferCmsBlock();
foreach ($languages as $lang) {
$text[$lang['id_lang']] = $tab['text'];
}
$czoffercmsblockinfo->text = $text;
$return &= $czoffercmsblockinfo->add();
}
if ($return && count($shopsIds) > 1) {
foreach ($shopsIds as $idShop) {
Shop::setContext(Shop::CONTEXT_SHOP, $idShop);
$czoffercmsblockinfo->text = $text;
$return &= $czoffercmsblockinfo->save();
}
}
return $return;
}
/**
* Add OfferCmsBlock when adding a new Shop
*
* @param array $params
*/
public function hookActionShopDataDuplication($params)
{
if ($czoffercmsblockinfoId = OfferCmsBlock::getOfferCmsBlockIdByShop($params['old_id_shop'])) {
Shop::setContext(Shop::CONTEXT_SHOP, $params['old_id_shop']);
$oldInfo = new OfferCmsBlock($infoId);
Shop::setContext(Shop::CONTEXT_SHOP, $params['new_id_shop']);
$newInfo = new OfferCmsBlock($infoId, null, $params['new_id_shop']);
$newInfo->text = $oldInfo->text;
$newInfo->save();
}
}
}