name = 'jxblogpostposts'; $this->tab = 'content_management'; $this->version = '0.0.3'; $this->author = 'Zemez'; $this->need_instance = 1; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('JX Blog Post Posts'); $this->description = $this->l('The module allows binding related posts to a post.'); $this->confirmUninstall = $this->l( 'Are you sure that you want to delete the module? All related data will be deleted forever!' ); $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_); $this->languages = Language::getLanguages(true); $this->repository = new JxblogPostPostsRepository( Db::getInstance(), $this->context->shop ); $this->settingsTab = array( 'class_name' => 'AdminJXBlogSettings', 'module' => $this->name, 'name' => 'Settings' ); $this->settingsSubTabs = array( array( 'class_name' => 'AdminJXBlogPostPostsSettings', 'module' => $this->name, 'name' => '\'Posts to post\' settings' ) ); } public function install() { $moduleManagerBuilder = ModuleManagerBuilder::getInstance(); $moduleManager = $moduleManagerBuilder->build(); if (!$moduleManager->isInstalled('jxblog') || !$moduleManager->isEnabled('jxblog')) { /*TODO# add an error if JX Blog does'nt installed*/ return false; } return parent::install() && $this->registerHook('actionObjectShopAddAfter') && $this->registerHook('displayJxblogPostExtra') && $this->registerHook('actionJxblogPostAfterAdd') && $this->registerHook('actionJxblogPostAfterUpdate') && $this->registerHook('actionJxblogPostAfterDelete') && $this->registerHook('header') && $this->registerHook('backOfficeHeader') && $this->registerHook('displayJXBlogPostFooter') && $this->repository->createTables() && $this->setSettings() && $this->addTabs(); } /** * Set default module settings after installation or adding new store * * @return bool */ public function setSettings() { Configuration::updateValue('JXBLOGPOSTPOSTS_ITEMS_TO_SHOW', 4); return true; } /** * Set default settings after new store creation * * @param $params */ public function hookActionObjectShopAddAfter($params) { $this->setSettings(); } public function uninstall() { return $this->repository->dropTables() && $this->removeTabs() && $this->removeSettings() && parent::uninstall(); } /** * Remove all module settings after module deletion * * @return bool */ public function removeSettings() { Configuration::deleteByName('JXBLOGPOSTPOSTS_ITEMS_TO_SHOW'); return true; } /** * Add related to module tabs to the main navigation menu * * @return bool */ protected function addTabs() { $idSettingsTab = TabCore::getIdFromClassName($this->settingsTab['class_name']); foreach ($this->settingsSubTabs as $newSubTab) { $this->addTab($newSubTab, $idSettingsTab); } return true; } public function addTab($tab, $parent) { $t = new Tab(); $t->class_name = $tab['class_name']; $t->id_parent = $parent; $t->module = $tab['module']; foreach ($this->languages as $lang) { $t->name[$lang['id_lang']] = $this->l($tab['name']); } if (!$t->save()) { return false; } return $t->id; } /** * Add related to module tabs to the main navigation menu * * @return bool */ protected function removeTabs() { foreach ($this->settingsSubTabs as $t) { if ($t) { $t = new Tab(TabCore::getIdFromClassName($t['class_name'])); if (!$t->delete()) { return false; } } } return true; } public function hookBackOfficeHeader() { if (Tools::getValue('controller') == 'AdminJXBlogPosts' && (Tools::getIsset('updatejxblog_post') || Tools::getIsset('addjxblog_post'))) { $this->context->controller->addJquery(); $this->context->controller->addJqueryUi('ui.widget'); $this->context->controller->addJqueryPlugin(array('tagify', 'autocomplete')); $this->context->controller->addJS($this->_path.'views/js/jxblogpostposts_admin.js'); } } public function hookHeader() { if (isset($this->context->controller->pagename) && $this->context->controller->pagename == 'jxblogpost') { $this->context->controller->addJS($this->_path.'/views/js/jxblogpostposts.js'); $this->context->controller->addCSS($this->_path.'/views/css/jxblogpostposts.css'); } } /** * Add extra fields and data to the post form * in a format array('fields' => fields, 'values' => value) * * @param $params * * @return array */ public function hookDisplayJxblogPostExtra($params) { $post = $params['post']; $fields = array(); $fields[] = array( 'type' => 'autocomplete', 'name' => 'related_posts', 'label' => $this->trans('Related posts', array(), 'Modules.Jxblogpostposts.Admin'), 'desc' => $this->trans('Related posts.', array(), 'Modules.Jxblogpostposts.Admin'), 'col'=> 3, 'id' => 'posts', 'url'=> $this->context->link->getAdminLink('AdminJXBlogPosts') ); return array( 'fields' => $fields, 'values' => array( 'related_posts' => $post ? $this->repository->getAdminPostPosts($post->id) : false ) ); } public function hookActionJxblogPostAfterAdd($params) { return $this->repository->associatePostToPost($params['id_jxblog_post']); } public function hookActionJxblogPostAfterUpdate($params) { return $this->repository->associatePostToPost($params['id_jxblog_post']); } public function hookActionJxblogPostAfterDelete($params) { $this->repository->disassociatePostFromAllPosts($params['id_jxblog_post']); $this->repository->disassociatePostToPost($params['id_jxblog_post']); return true; } public function hookDisplayJXBlogPostFooter($params) { $this->context->smarty->assign( 'posts', $this->repository->getRelatedPosts( $params['post']['id_jxblog_post'], $this->context->language->id, $this->context->shop->id, $this->context->customer->id_default_group, Configuration::get('JXBLOGPOSTPOSTS_ITEMS_TO_SHOW') ) ); return $this->display($this->local_path, 'views/templates/hook/jxblogpostposts.tpl'); } }