* @copyright Copyright (c) 2014-2018 Krystian Podemski - www.PrestaHome.com / www.Podemski.info * @license You only can use module, nothing more! */ if (!defined('_PS_VERSION_')) { exit; } class PhBlogRecentPosts extends Module { private $_html = ''; public $fields_form; public $fields_value; public $validation_errors = array(); public static $cfg_prefix = 'PH_RECENTPOSTS_'; public function __construct() { $this->name = 'phblogrecentposts'; $this->tab = 'front_office_features'; $this->version = '2.0.0'; $this->author = 'PrestaHome'; $this->need_instance = 0; $this->is_configurable = 1; $this->ps_versions_compliancy['min'] = '1.7.0.0'; $this->ps_versions_compliancy['max'] = _PS_VERSION_; $this->secure_key = Tools::encrypt($this->name); $this->bootstrap = true; if (!Module::isInstalled('ph_simpleblog') || !Module::isEnabled('ph_simpleblog')) { $this->warning = $this->l('You have to install and activate ph_simpleblog before use PhBlogRecentPosts'); } parent::__construct(); $this->displayName = $this->l('Blog for PrestaShop - Recent posts on the homepage'); $this->description = $this->l('Widget to display recently added posts to Blog for PrestaShop module'); $this->confirmUninstall = $this->l('Are you sure you want to delete this module?'); } public function getDefaults() { return array( 'LAYOUT' => 'grid', 'GRID_COLUMNS' => 2, 'FROM' => 'recent', 'POSITION' => 'home', 'NB' => 4, ); } public function install() { // Hooks & Install return (parent::install() && $this->prepareModuleSettings() && $this->registerHook('displaySimpleBlogRecentPosts') && $this->registerHook('displayHome') && $this->registerHook('displayHeader')); } public function uninstall() { if (!parent::uninstall()) { return false; } foreach ($this->getDefaults() as $key => $value) { Configuration::deleteByName(self::$cfg_prefix.$key); } return true; } public function prepareModuleSettings() { foreach ($this->getDefaults() as $key => $value) { Configuration::updateValue(self::$cfg_prefix.$key, $value, true); } return true; } public function prepareValueForLangs($value) { $languages = Language::getLanguages(false); $output = array(); foreach ($languages as $language) { $output[$language['id_lang']] = $value; } return $output; } public function getContent() { $id_shop = (int) $this->context->shop->id; $this->initFieldsForm(); if (isset($_POST['save'.$this->name])) { $multiLangFields = array(); foreach ($this->getDefaults() as $field_name => $field_value) { if (is_array($field_value)) { $multiLangFields[] = self::$cfg_prefix.$field_name; } } foreach ($_POST as $key => $value) { $fieldName = substr($key, 0, -2); if (in_array($fieldName, $multiLangFields)) { $thisFieldValue = array(); foreach (Language::getLanguages(true) as $language) { if (isset($_POST[$fieldName.'_'.$language['id_lang']])) { $thisFieldValue[$language['id_lang']] = $_POST[$fieldName.'_'.$language['id_lang']]; } } $_POST[$fieldName] = $thisFieldValue; } } foreach ($this->getDefaults() as $field_name => $field_value) { if (is_array($field_value)) { Configuration::updateValue($field_name, ${$field_name}, true); } } foreach ($this->fields_form as $form) { foreach ($form['form']['input'] as $field) { if (isset($field['validation'])) { $errors = array(); $value = Tools::getValue($field['name']); if (isset($field['required']) && $field['required'] && $value == false && (string) $value != '0') { $errors[] = sprintf(Tools::displayError('Field "%s" is required.'), $field['label']); } elseif ($value) { if (!Validate::{$field['validation']}($value)) { $errors[] = sprintf(Tools::displayError('Field "%s" is invalid.'), $field['label']); } } if ($value === false && isset($field['default_value'])) { $value = $field['default_value']; } if (count($errors)) { $this->validation_errors = array_merge($this->validation_errors, $errors); } elseif ($value == false) { switch ($field['validation']) { case 'isUnsignedId': case 'isUnsignedInt': case 'isInt': case 'isBool': $value = 0; break; default: $value = ''; break; } Configuration::updateValue($field['name'], $value, true); } else { $value = Tools::getValue($field['name']); Configuration::updateValue($field['name'], $value, true); } } else { $value = Tools::getValue($field['name']); Configuration::updateValue($field['name'], $value, true); } } } if (count($this->validation_errors)) { $this->_html .= $this->displayError(implode('
', $this->validation_errors)); } else { $this->_html .= Tools::redirectAdmin(AdminController::$currentIndex.'&configure='.$this->name.'&conf=6&token='.Tools::getAdminTokenLite('AdminModules')); } } $helper = $this->initForm(); foreach ($this->getDefaults() as $key => $value) { if (is_array($value)) { foreach ($value as $lang => $val) { $helper->fields_value[self::$cfg_prefix.$key][(int) $lang] = Tools::getValue(self::$cfg_prefix.$key.'_'.(int) $lang, Configuration::get(self::$cfg_prefix.$key, (int) $lang)); } } else { $helper->fields_value[self::$cfg_prefix.$key] = Configuration::get(self::$cfg_prefix.$key); } } return $this->_html.$helper->generateForm($this->fields_form); } protected function initFieldsForm() { $from = array(); $from[] = array('name' => $this->l('Recent posts'), 'id' => 'recent'); $from[] = array('name' => $this->l('Featured posts'), 'id' => 'featured'); $layout = array(); $layout[] = array('name' => $this->l('Grid'), 'id' => 'grid'); $layout[] = array('name' => $this->l('List'), 'id' => 'list'); $available_categories = SimpleBlogCategory::getCategories($this->context->language->id, true, false); foreach ($available_categories as &$category) { $category['name'] = 'Category: '.$category['name']; if ($category['is_child']) { $category['name'] = '     '.$category['name']; } $from[] = array('name' => $category['name'], 'id' => $category['id']); } $this->fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->displayName, ), 'input' => array( array( 'type' => 'select', 'label' => $this->l('Display posts from:'), 'name' => self::$cfg_prefix.'FROM', 'validation' => 'isAnything', 'options' => array( 'query' => $from, 'id' => 'id', 'name' => 'name', ), ), array( 'type' => 'select', 'name' => self::$cfg_prefix.'LAYOUT', 'label' => $this->l('Recent Posts layout:'), 'options' => array( 'query' => $layout, 'id' => 'id', 'name' => 'name', ), ), array( 'type' => 'select', 'name' => self::$cfg_prefix.'GRID_COLUMNS', 'label' => $this->l('Grid columns:'), 'desc' => $this->l('Working only with "Recent Posts layout:" setup to "Grid"'), 'options' => array( 'query' => array( array('name' => 2, 'id' => 2), array('name' => 4, 'id' => 4), array('name' => 6, 'id' => 6), ), 'id' => 'id', 'name' => 'name', ), ), array( 'name' => self::$cfg_prefix.'NB', 'type' => 'text', 'label' => $this->l('Number of posts:'), 'validation' => 'isUnsignedInt', 'desc' => $this->l('Default: 4'), 'class' => 'input-mini', 'size' => 2 ), ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right', ), ); } protected function initForm() { $default_lang = (int) Configuration::get('PS_LANG_DEFAULT'); $helper = new HelperForm(); $helper->module = $this; $helper->name_controller = $this->name; $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 = 'save'.$this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'), ), ); return $helper; } public function assignModuleVariables() { foreach ($this->getDefaults() as $key => $value) { if (is_array($value)) { $this->smarty->assign(strtolower($key), Configuration::get(self::$cfg_prefix.$key, $this->context->language->id)); } else { $this->smarty->assign(strtolower($key), Configuration::get(self::$cfg_prefix.$key)); } } } public function preparePosts($nb = 6, $from = null) { if (!Module::isInstalled('ph_simpleblog') || !Module::isEnabled('ph_simpleblog')) { return false; } require_once _PS_MODULE_DIR_.'ph_simpleblog/classes/BlogPostsFinder.php'; $finder = new BlogPostsFinder; if ($from == 'featured') { $finder->setFeatured(true); } elseif ($from == 'recent') { // n/a } else { $finder->setIdCategory((int) $from); } $finder->setLimit((int) $nb); $posts = $finder->findPosts(); return $posts; } public function prepareSimpleBlogPosts() { $posts = $this->preparePosts((int) Configuration::get(self::$cfg_prefix.'NB'), Configuration::get(self::$cfg_prefix.'FROM')); if (!$posts) { return; } $gridColumns = Configuration::get(self::$cfg_prefix.'GRID_COLUMNS'); $blogLayout = Configuration::get(self::$cfg_prefix.'LAYOUT'); $this->context->smarty->assign(array( 'blogLayout' => $blogLayout, 'columns' => $gridColumns, 'gallery_dir' => _MODULE_DIR_.'ph_simpleblog/galleries/', 'recent_posts' => $posts, 'tpl_path' => dirname(__FILE__).'/views/templates/hook/', 'is_category' => false, 'blogLink' => $this->context->link->getModuleLink('ph_simpleblog', 'list') )); } public function hookDisplaySimpleBlogRecentPosts($params) { header('test12:asdasdas'); $this->prepareSimpleBlogPosts(); if (isset($params['template'])) { return $this->display(__FILE__, $params['template'].'.tpl'); } else { return $this->hookDisplayHome($params); } } public function hookDisplayHome($params) { $this->prepareSimpleBlogPosts(); return $this->display(__FILE__, 'recent.tpl'); } }