* @copyright 2007-2013 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_PS_VERSION_')) exit; include_once _PS_MODULE_DIR_.'blockcmsinfo/infoClass.php'; class Blockcmsinfo extends Module { public function __construct() { $this->name = 'blockcmsinfo'; $this->tab = 'front_office_features'; $this->version = '1.0'; $this->bootstrap = true; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Customer cms information block'); $this->description = $this->l('Adds an information block customers in your store.'); } public function install() { return parent::install() && $this->installDB() && Configuration::updateValue('blockcmsinfo_nbblocks', 2) && $this->registerHook('home') && $this->installFixtures(); } public function installDB() { $return = true; $return &= Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'info` ( `id_info` INT UNSIGNED NOT NULL AUTO_INCREMENT, `id_shop` int(10) unsigned NOT NULL , PRIMARY KEY (`id_info`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 ;'); $return &= Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'info_lang` ( `id_info` INT UNSIGNED NOT NULL AUTO_INCREMENT, `id_lang` int(10) unsigned NOT NULL , `text` text NOT NULL, PRIMARY KEY (`id_info`, `id_lang`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 ;'); return $return; } public function uninstall() { // Delete configuration return Configuration::deleteByName('blockcmsinfo_nbblocks') && $this->uninstallDB() && parent::uninstall(); } public function uninstallDB() { return Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'info`') && Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'info_lang`'); } public function addToDB() { if (isset($_POST['nbblocks'])) { for ($i = 1; $i <= (int)$_POST['nbblocks']; $i++) { Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'info` (`text`) VALUES ("'.((isset($_POST['info'.$i.'_text']) && $_POST['info'.$i.'_text'] != '') ? pSQL($_POST['info'.$i.'_text']) : '').'")'); } return true; } else return false; } public function removeFromDB() { return Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'info`'); } public function getContent() { $html = ''; $id_info = (int)Tools::getValue('id_info'); if (Tools::isSubmit('saveblockcmsinfo')) { if ($id_info = Tools::getValue('id_info')) $info = new infoClass((int)$id_info); else $info = new infoClass(); $info->copyFromPost(); $info->id_shop = $this->context->shop->id; if ($info->validateFields(false) && $info->validateFieldsLang(false)) { $info->save(); $this->_clearCache('blockcmsinfo.tpl'); } else $html .= '
'.$this->l('An error occurred while attempting to save.').'
'; } if (Tools::isSubmit('updateblockcmsinfo') || Tools::isSubmit('addblockcmsinfo')) { $helper = $this->initForm(); foreach (Language::getLanguages(false) as $lang) if ($id_info) { $info = new infoClass((int)$id_info); $helper->fields_value['text'][(int)$lang['id_lang']] = $info->text[(int)$lang['id_lang']]; } else $helper->fields_value['text'][(int)$lang['id_lang']] = Tools::getValue('text_'.(int)$lang['id_lang'], ''); if ($id_info = Tools::getValue('id_info')) { $this->fields_form[0]['form']['input'][] = array('type' => 'hidden', 'name' => 'id_info'); $helper->fields_value['id_info'] = (int)$id_info; } return $html.$helper->generateForm($this->fields_form); } else if (Tools::isSubmit('deleteblockcmsinfo')) { $info = new infoClass((int)$id_info); $info->delete(); $this->_clearCache('blockcmsinfo.tpl'); Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules')); } else { $helper = $this->initList(); return $html.$helper->generateList($this->getListContent((int)Configuration::get('PS_LANG_DEFAULT')), $this->fields_list); } if (isset($_POST['submitModule'])) { Configuration::updateValue('blockcmsinfo_nbblocks', ((isset($_POST['nbblocks']) && $_POST['nbblocks'] != '') ? (int)$_POST['nbblocks'] : '')); if ($this->removeFromDB() && $this->addToDB()) { $this->_clearCache('blockcmsinfo.tpl'); $output = '
'.$this->l('The block configuration has been updated.').'
'; } else $output = '
'.$this->l('An error occurred while attempting to save.').'
'; } } protected function getListContent($id_lang) { return Db::getInstance()->executeS(' SELECT r.`id_info`, r.`id_shop`, rl.`text` FROM `'._DB_PREFIX_.'info` r LEFT JOIN `'._DB_PREFIX_.'info_lang` rl ON (r.`id_info` = rl.`id_info`) WHERE `id_lang` = '.(int)$id_lang.' '.Shop::addSqlRestrictionOnLang()); } protected function initForm() { $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); $this->fields_form[0]['form'] = array( 'tinymce' => true, 'legend' => array( 'title' => $this->l('New cms custom block.'), ), 'input' => array( array( 'type' => 'textarea', 'label' => $this->l('Text:'), 'lang' => true, 'name' => 'text', 'cols' => 40, 'rows' => 10, 'class' => 'rte', 'autoload_rte' => true, ) ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'button' ) ); $helper = new HelperForm(); $helper->module = $this; $helper->name_controller = 'blockcmsinfo'; $helper->identifier = $this->identifier; $helper->token = Tools::getAdminTokenLite('AdminModules'); foreach (Language::getLanguages(false) as $lang) $helper->languages[] = array( '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 = 'saveblockcmsinfo'; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ) ); return $helper; } protected function initList() { $this->fields_list = array( 'id_info' => array( 'title' => $this->l('Custom block #'), 'width' => 40, 'type' => 'text', ), ); if (Shop::isFeatureActive()) $this->fields_list['id_shop'] = array('title' => $this->l('ID Shop'), 'align' => 'center', 'width' => 25, 'type' => 'int'); $helper = new HelperList(); $helper->shopLinkType = ''; $helper->simple_header = true; $helper->identifier = 'id_info'; $helper->actions = array('edit', 'delete'); $helper->show_toolbar = true; $helper->imageType = 'jpg'; $helper->toolbar_btn['new'] = array( 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&add'.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Add new') ); $helper->title = $this->displayName; $helper->table = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; return $helper; } public function hookHome($params) { // Check if not a mobile theme if ($this->context->getMobileDevice() != false) return false; $this->context->controller->addCSS($this->_path.'style.css', 'all'); if (!$this->isCached('blockcmsinfo.tpl', $this->getCacheId())) { $infos = $this->getListContent($this->context->language->id); $this->context->smarty->assign(array('infos' => $infos, 'nbblocks' => count($infos))); } return $this->display(__FILE__, 'blockcmsinfo.tpl', $this->getCacheId()); } public function installFixtures() { $return = true; $tab_texts = array( array('text' => $this->l('Custom text.')), array('text' => $this->l('Custom text.')), ); foreach($tab_texts as $tab) { $info = new infoClass(); foreach (Language::getLanguages(false) as $lang) $info->text[$lang['id_lang']] = $tab['text']; $info->id_shop = $this->context->shop->id; $return &= $info->save(); } return $return; } }