1122 lines
37 KiB
PHP
1122 lines
37 KiB
PHP
<?php
|
|
/**
|
|
* 2024 Anvanto
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to the Academic Free License (AFL 3.0)
|
|
*
|
|
* @author Anvanto <anvantoco@gmail.com>
|
|
* @copyright 2024 Anvanto
|
|
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
|
*/
|
|
|
|
if (!defined('_PS_VERSION_')) {
|
|
exit;
|
|
}
|
|
|
|
require_once _PS_MODULE_DIR_.'anblog/loader.php';
|
|
|
|
class anblog extends Module
|
|
{
|
|
const PREFIX = 'an_bl_';
|
|
|
|
public $_tabs = [
|
|
[
|
|
'class_name' => 'AdminAnblogManagement',
|
|
'parent' => 'IMPROVE',
|
|
'name' => 'Anvanto Blog Pro',
|
|
'icon' => 'create',
|
|
'displayTab' => false,
|
|
'active' => 1
|
|
],
|
|
[
|
|
'class_name' => 'AdminAnblogBlogs',
|
|
'parent' => 'AdminAnblogManagement',
|
|
'name' => 'Posts',
|
|
'displayTab' => true,
|
|
'active' => 1
|
|
],
|
|
[
|
|
'class_name' => 'AdminAnblogCategories',
|
|
'parent' => 'AdminAnblogManagement',
|
|
'name' => 'Categories',
|
|
'displayTab' => true,
|
|
'active' => 1
|
|
],
|
|
[
|
|
'class_name' => 'AdminAnblogComments',
|
|
'parent' => 'AdminAnblogManagement',
|
|
'name' => 'Comments',
|
|
'displayTab' => true,
|
|
'active' => 1
|
|
],
|
|
[
|
|
'class_name' => 'AdminAnblogWidgets',
|
|
'parent' => 'AdminAnblogManagement',
|
|
'name' => 'Widgets',
|
|
'displayTab' => true,
|
|
'active' => 1
|
|
],
|
|
[
|
|
'class_name' => 'AdminAnblogSettings',
|
|
'parent' => 'AdminAnblogManagement',
|
|
'name' => 'Settings',
|
|
'displayTab' => true,
|
|
'active' => 1
|
|
],
|
|
[
|
|
'class_name' => 'AdminAnblogAjax',
|
|
'parent' => 'AdminAnblogManagement',
|
|
'name' => 'Anblog: ajax',
|
|
'displayTab' => false,
|
|
'active' => 0
|
|
]
|
|
];
|
|
|
|
public function __construct()
|
|
{
|
|
$this->name = 'anblog';
|
|
$this->tab = 'front_office_features';
|
|
$this->version = '3.4.15';
|
|
$this->author = 'Anvanto';
|
|
$this->module_key = 'c4eeba6dfce602f34ec16e1ccf830b1a';
|
|
$this->need_instance = 0;
|
|
$this->bootstrap = true;
|
|
$this->new174 = version_compare(_PS_VERSION_, '1.7.4.0', '>=') ? true : false;
|
|
$this->new = version_compare(_PS_VERSION_, '1.7.0.0', '>=') ? true : false;
|
|
$this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
|
|
|
|
$this->secure_key = Tools::encrypt($this->name);
|
|
|
|
parent::__construct();
|
|
|
|
$this->displayName = $this->l('Anvanto Blog Pro');
|
|
$this->description = $this->l('Manage Blog Content');
|
|
|
|
$this->defaultSettings = include _PS_MODULE_DIR_ . $this->name . '/config.php';
|
|
|
|
$this->valuesWithLang = ['blog_link_title', 'meta_title', 'meta_description', 'meta_keywords', 'category_rewrite', 'detail_rewrite'];
|
|
|
|
$this->imageTypes = [
|
|
[
|
|
'name' => 'anblog_default',
|
|
'width' => 885,
|
|
'height' => 620,
|
|
],
|
|
[
|
|
'name' => 'anblog_thumb',
|
|
'width' => 885,
|
|
'height' => 620,
|
|
],
|
|
[
|
|
'name' => 'anblog_listing_leading_img',
|
|
'width' => 405,
|
|
'height' => 285,
|
|
],
|
|
[
|
|
'name' => 'anblog_listing_secondary_img',
|
|
'width' => 253,
|
|
'height' => 177,
|
|
]
|
|
];
|
|
|
|
$this->tabDisplayTranslate = [
|
|
'AdminAnblogBlogs' => $this->l('Posts'),
|
|
'AdminAnblogCategories' => $this->l('Categories'),
|
|
'AdminAnblogComments' => $this->l('Comments'),
|
|
'AdminAnblogWidgets' => $this->l('Widgets'),
|
|
'AdminAnblogSettings' => $this->trans('Settings', [], 'Admin.Global')
|
|
];
|
|
}
|
|
|
|
public function install()
|
|
{
|
|
/* Adds Module */
|
|
$defaultSettings = include _PS_MODULE_DIR_ . $this->name . '/config.php';
|
|
|
|
$valuesWithLang = ['blog_link_title', 'meta_title', 'meta_description', 'meta_keywords', 'category_rewrite', 'detail_rewrite'];
|
|
$languages = Language::getLanguages(false);
|
|
|
|
foreach ($defaultSettings as $key => $value) {
|
|
if (in_array($key, $valuesWithLang)) {
|
|
|
|
$valueLang = [];
|
|
|
|
foreach ($languages as $language){
|
|
$valueLang[$language['id_lang']] = $value;
|
|
}
|
|
|
|
Configuration::updateValue(anblog::PREFIX . $key, $valueLang);
|
|
|
|
} else {
|
|
Configuration::updateValue(anblog::PREFIX . $key, $value);
|
|
}
|
|
}
|
|
|
|
if (parent::install()) {
|
|
$this->registerANHook();
|
|
$res = true;
|
|
|
|
Configuration::updateValue('ANBLOG_CATEORY_MENU', 1);
|
|
|
|
Configuration::updateValue('link_rewrite', 'blog');
|
|
|
|
// Delete old routers
|
|
Configuration::deleteByName('PS_ROUTE_module-anblog-category');
|
|
Configuration::deleteByName('PS_ROUTE_module-anblog-blog');
|
|
Configuration::deleteByName('PS_ROUTE_module-anblog-list');
|
|
|
|
|
|
/* Creates tables */
|
|
if (Configuration::get(anblog::PREFIX . 'soft_reset') == 0) {
|
|
$res &= $this->installImageTypes();
|
|
$res &= $this->createTables();
|
|
}
|
|
|
|
$res &= $this->installConfig();
|
|
|
|
Configuration::updateValue('AP_INSTALLED_ANBLOG', '1');
|
|
//DONGND: check thumb column, if not exist auto add
|
|
if (Db::getInstance()->executeS(
|
|
'SHOW TABLES LIKE \'%anblog_blog%\''
|
|
)
|
|
&& count(
|
|
Db::getInstance()->executes(
|
|
'SELECT "thumb" FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "'._DB_NAME_.'"
|
|
AND TABLE_NAME = "'._DB_PREFIX_.'anblog_blog" AND COLUMN_NAME = "thumb"'
|
|
)
|
|
)<1
|
|
) {
|
|
Db::getInstance()->execute(
|
|
'ALTER TABLE `'._DB_PREFIX_.'anblog_blog` ADD `thumb` varchar(255) DEFAULT NULL'
|
|
);
|
|
}
|
|
|
|
foreach ($this->_tabs as $tab) {
|
|
$this->tabAdd($tab, $this);
|
|
}
|
|
|
|
return (bool)$res;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function importDemoContent()
|
|
{
|
|
anBlogWidgets::importJsonWidgets(new anBlogContentTheme());
|
|
}
|
|
|
|
public function installImageTypes()
|
|
{
|
|
$res = true;
|
|
|
|
$imageType = new ImageType();
|
|
$imageType->products = 0;
|
|
$imageType->categories = 0;
|
|
$imageType->manufacturers = 0;
|
|
$imageType->suppliers = 0;
|
|
$imageType->stores = 0;
|
|
|
|
foreach ($this->imageTypes as $item){
|
|
$imageType->name = $item['name'];
|
|
$imageType->width = $item['width'];
|
|
$imageType->height = $item['height'];
|
|
$res &= $imageType->add();
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
public function checkAndCreateImagesPresets()
|
|
{
|
|
|
|
if (!count(Db::getInstance()->executeS(
|
|
'SELECT *
|
|
FROM `'._DB_PREFIX_.'image_type`
|
|
WHERE `name`LIKE \'anblog_%\''
|
|
))) {
|
|
$this->installImageTypes();
|
|
}
|
|
}
|
|
/**
|
|
*
|
|
*/
|
|
public function hookDisplayBackOfficeHeader()
|
|
{
|
|
//if (Dispatcher::getInstance()->getController() == 'AdminAnblogDashboard') {}
|
|
if (file_exists(_PS_THEME_DIR_ . '/views/css/modules/anblog/assets/admin/blogmenu.css')) {
|
|
$this->context->controller->addCss($this->_path . 'views/assets/admin/blogmenu.css');
|
|
} else {
|
|
$this->context->controller->addCss($this->_path . 'views/css/admin/blogmenu.css');
|
|
}
|
|
|
|
if (Dispatcher::getInstance()->getController() == 'AdminThemes') {
|
|
$this->checkAndCreateImagesPresets();
|
|
}
|
|
}
|
|
|
|
public function hookGSitemapAppendUrls($params)
|
|
{
|
|
if(Configuration::get(anblog::PREFIX . 'enable_google_sitemap')){
|
|
return anBlogSitemap::gSitemapCreateLinks($params['lang']);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getIdGuest(){
|
|
|
|
$idCustomer = Context::getContext()->cookie->id_guest;
|
|
|
|
$cookie = Context::getContext()->cookie;
|
|
|
|
if ($idCustomer){
|
|
return $idCustomer;
|
|
} else {
|
|
if (!$cookie->__isset(self::PREFIX.'_id_guest') | $cookie->__get(self::PREFIX.'_id_guest') == ''){
|
|
$idCustomer = '111' . tools::passwdGen(5, 'NUMERIC');
|
|
$cookie->__set(self::PREFIX.'_id_guest', $idCustomer);
|
|
$cookie->setExpire(time() + 60 * 60 * 24 * 180);
|
|
$cookie->write();
|
|
|
|
} else {
|
|
$idCustomer = $cookie->__get(self::PREFIX.'_id_guest');
|
|
|
|
}
|
|
}
|
|
|
|
return $idCustomer;
|
|
}
|
|
|
|
public function getContent()
|
|
{
|
|
Tools::redirectAdmin($this->context->link->getAdminLink('AdminAnblogSettings'));
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function _prepareHook()
|
|
{
|
|
$helper = AnblogHelper::getInstance();
|
|
|
|
$category = new Anblogcat(Tools::getValue('id_anblogcat'), $this->context->language->id);
|
|
|
|
$tree = $category->getFrontEndTree((int)$category->id_anblogcat > 1 ? $category->id_anblogcat : 1, $helper);
|
|
$this->smarty->assign('tree', $tree);
|
|
if ($category->id_anblogcat) {
|
|
// validate module
|
|
$this->smarty->assign('currentCategory', $category);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*
|
|
*/
|
|
|
|
public function hookDisplayHeader()
|
|
{
|
|
if (file_exists(_PS_THEME_DIR_.'/views/css/modules/anblog/assets/anblog.css')) {
|
|
$this->context->controller->addCSS(($this->_path).'views/assets/anblog.css', 'all');
|
|
} else {
|
|
$this->context->controller->addCSS(($this->_path).'views/css/anblog.css', 'all');
|
|
}
|
|
|
|
$this->context->controller->addJquery();
|
|
|
|
$this->context->controller->registerJavascript(
|
|
$this->name . "_js",
|
|
'modules/' . $this->name . '/views/js/like.js',
|
|
['server' => 'local', 'priority' => 150]
|
|
);
|
|
|
|
//DONGND:: update language link
|
|
if (Tools::getValue('module') == 'anblog') {
|
|
$langs = Language::getLanguages(false);
|
|
if (count($langs) > 1) {
|
|
$config = AnblogConfig::getInstance();
|
|
$array_list_rewrite = array();
|
|
$array_category_rewrite = array();
|
|
$array_config_category_rewrite = array();
|
|
$array_blog_rewrite = array();
|
|
$array_config_blog_rewrite = array();
|
|
$config_url_use_id = !Configuration::get('PS_REWRITING_SETTINGS');
|
|
$page_name = Dispatcher::getInstance()->getController();
|
|
|
|
if ($page_name == 'blog') {
|
|
if ($config_url_use_id) {
|
|
$id_blog = Tools::getValue('id');
|
|
} else {
|
|
$id_shop = (int)Context::getContext()->shop->id;
|
|
$block_rewrite = pSQL(Tools::getValue('rewrite'));
|
|
$sql = 'SELECT bl.id_anblog_blog FROM '
|
|
._DB_PREFIX_.'anblog_blog_lang bl INNER JOIN '
|
|
._DB_PREFIX_.'anblog_blog_shop bs on bl.id_anblog_blog=bs.id_anblog_blog AND id_shop='
|
|
.$id_shop.' AND link_rewrite = "'.$block_rewrite.'"';
|
|
if ($row = Db::getInstance()->getRow($sql)) {
|
|
$id_blog = $row['id_anblog_blog'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($page_name == 'category') {
|
|
if ($config_url_use_id) {
|
|
$id_category = Tools::getValue('id');
|
|
} else {
|
|
$id_shop = (int)Context::getContext()->shop->id;
|
|
$category_rewrite = pSQL(Tools::getValue('rewrite'));
|
|
$sql = 'SELECT cl.id_anblogcat FROM '
|
|
._DB_PREFIX_.'anblogcat_lang cl INNER JOIN '
|
|
._DB_PREFIX_.'anblogcat_shop cs on cl.id_anblogcat=cs.id_anblogcat AND id_shop='
|
|
.$id_shop. ' INNER JOIN '
|
|
._DB_PREFIX_.'anblogcat cc on cl.id_anblogcat=cc.id_anblogcat
|
|
AND cl.id_anblogcat != cc.id_parent AND link_rewrite = "'.$category_rewrite.'"';
|
|
if ($row = Db::getInstance()->getRow($sql)) {
|
|
$id_category = $row['id_anblogcat'];
|
|
}
|
|
}
|
|
$blog_category_obj = new Anblogcat($id_category);
|
|
}
|
|
|
|
foreach ($langs as $lang) {
|
|
$array_list_rewrite[$lang['iso_code']] = Configuration::get(anblog::PREFIX . 'link_rewrite_'.$lang['id_lang'], 'blog');
|
|
|
|
if (isset($id_blog)) {
|
|
$blog_obj = new Anblogblog($id_blog);
|
|
$array_blog_rewrite[$lang['iso_code']] = $blog_obj->link_rewrite[$lang['id_lang']];
|
|
if ($config_url_use_id) {
|
|
$array_config_blog_rewrite[$lang['iso_code']]
|
|
= Configuration::get(anblog::PREFIX . 'detail_rewrite_'.$lang['id_lang'], 'detail');
|
|
}
|
|
}
|
|
|
|
if (isset($id_category)) {
|
|
$array_category_rewrite[$lang['iso_code']] = $blog_category_obj->link_rewrite[$lang['id_lang']];
|
|
if ($config_url_use_id) {
|
|
$array_config_category_rewrite[$lang['iso_code']]
|
|
= Configuration::get(anblog::PREFIX . 'category_rewrite_'.$lang['id_lang'], 'category');
|
|
}
|
|
}
|
|
};
|
|
|
|
Media::addJsDef(
|
|
array(
|
|
'array_list_rewrite' => $array_list_rewrite,
|
|
'array_category_rewrite' => $array_category_rewrite,
|
|
'array_blog_rewrite' => $array_blog_rewrite,
|
|
'array_config_category_rewrite' => $array_config_category_rewrite,
|
|
'array_config_blog_rewrite' => $array_config_blog_rewrite,
|
|
'config_url_use_id' => (int)!!$config_url_use_id
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function hookDisplayLeftColumn($params)
|
|
{
|
|
$this->context->smarty->assign(array(
|
|
'an_left_category' => $this->leftCategoryBlog(),
|
|
'an_left_tag' => $this->lefTagBlog(),
|
|
'an_left_recent' => $this->leftRecentBlog(),
|
|
));
|
|
|
|
$this->context->smarty->assign('anblog_imageTypes', $this->getImageTypesForTpl());
|
|
|
|
return $this->display(__FILE__, 'views/templates/hook/left_column_main.tpl');
|
|
}
|
|
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function leftCategoryBlog()
|
|
{
|
|
$html = '';
|
|
|
|
|
|
if (/*Configuration::get('ANBLOG_CATEORY_MENU') && */$this->_prepareHook()) {
|
|
$html .= $this->display(__FILE__, 'views/templates/hook/categories_menu.tpl');
|
|
}
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function leftRecentBlog()
|
|
{
|
|
$html = '';
|
|
|
|
$config = AnblogConfig::getInstance();
|
|
$helper = AnblogHelper::getInstance();
|
|
$authors = array();
|
|
|
|
$limit = (int)Configuration::get(anblog::PREFIX . 'limit_recent_blog', 5);
|
|
$leading_blogs = AnblogBlog::getListBlogs(
|
|
null,
|
|
$this->context->language->id,
|
|
1,
|
|
$limit,
|
|
'date_add',
|
|
'DESC',
|
|
array(),
|
|
true
|
|
);
|
|
foreach ($leading_blogs as $key => $blog) {
|
|
$blog = AnblogHelper::buildBlog($helper, $blog, 'anblog_listing_secondary_img', $config);
|
|
if ($blog['id_employee']) {
|
|
if (!isset($authors[$blog['id_employee']])) {
|
|
// validate module
|
|
$authors[$blog['id_employee']] = new Employee($blog['id_employee']);
|
|
}
|
|
|
|
if ($blog['author_name'] != '') {
|
|
$blog['author'] = $blog['author_name'];
|
|
$blog['author_link'] = $helper->getBlogAuthorLink($blog['author_name']);
|
|
} else {
|
|
$blog['author'] = $authors[$blog['id_employee']]->firstname.' '.$authors[$blog['id_employee']]->lastname;
|
|
$blog['author_link'] = $helper->getBlogAuthorLink($authors[$blog['id_employee']]->id);
|
|
}
|
|
} else {
|
|
$blog['author'] = '';
|
|
$blog['author_link'] = '';
|
|
}
|
|
|
|
$leading_blogs[$key] = $blog;
|
|
}
|
|
|
|
$this->smarty->assign('leading_blogs', $leading_blogs);
|
|
$html .= $this->display(__FILE__, 'views/templates/hook/left_recent.tpl');
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function lefTagBlog()
|
|
{
|
|
|
|
$html = '';
|
|
$helper = AnblogHelper::getInstance();
|
|
|
|
$leading_blogs = AnblogBlog::getListBlogs(
|
|
null,
|
|
$this->context->language->id,
|
|
1,
|
|
100000,
|
|
'date_add',
|
|
'DESC',
|
|
array(),
|
|
true
|
|
);
|
|
|
|
$tags_temp = array();
|
|
foreach ($leading_blogs as $value) {
|
|
$tags_temp = array_merge($tags_temp, explode(",", $value['tags']));
|
|
}
|
|
|
|
$tags_temp = array_unique($tags_temp);
|
|
$tags = array();
|
|
foreach ($tags_temp as $tag_temp) {
|
|
$tags[] = array(
|
|
'name' => $tag_temp,
|
|
'link' => $helper->getBlogTagLink($tag_temp)
|
|
);
|
|
}
|
|
|
|
$this->smarty->assign('anblogtags', $tags);
|
|
$html .= $this->display(__FILE__, 'views/templates/hook/left_anblogtags.tpl');
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* @param null $name
|
|
* @return string
|
|
*/
|
|
protected function getCacheId($name = null)
|
|
{
|
|
$name = ($name ? $name.'|' : '').implode('-', Customer::getGroupsStatic($this->context->customer->id));
|
|
return parent::getCacheId($name);
|
|
}
|
|
|
|
/**
|
|
* @param $params
|
|
* @return string
|
|
*/
|
|
public function hookdisplayRightcolumn($params)
|
|
{
|
|
return $this->hookdisplayLeftColumn($params);
|
|
}
|
|
|
|
/**
|
|
* @see Module::uninstall()
|
|
*/
|
|
public function uninstall()
|
|
{
|
|
$res = true;
|
|
|
|
$this->tabDelete(['class_name' => 'AdminAnblogPosts']);
|
|
$this->tabDelete(['class_name' => 'AdminAnblogCategories']);
|
|
$this->tabDelete(['class_name' => 'AdminAnblogComments']);
|
|
$this->tabDelete(['class_name' => 'AdminAnblogSettings']);
|
|
$this->tabDelete(['class_name' => 'AdminAnblogWidgets']);
|
|
$this->tabDelete(['class_name' => 'AdminAnblogAjax']);
|
|
$this->tabDelete(['class_name' => 'AdminAnblogManagement']);
|
|
|
|
if (Configuration::get(anblog::PREFIX . 'soft_reset') == 0) {
|
|
foreach (ImageType::getImagesTypes() as $type) {
|
|
if ($type['name'] == 'anblog_default'
|
|
|| $type['name'] == 'anblog_thumb'
|
|
|| $type['name'] == 'anblog_listing_leading_img'
|
|
|| $type['name'] == 'anblog_listing_secondary_img'
|
|
) {
|
|
$imageType = new ImageType($type['id_image_type']);
|
|
$res &= $imageType->delete();
|
|
}
|
|
}
|
|
|
|
Db::getInstance()->execute(
|
|
'
|
|
DROP TABLE IF EXISTS
|
|
`'._DB_PREFIX_.'anblogcat`,
|
|
`'._DB_PREFIX_.'anblogcat_lang`,
|
|
`'._DB_PREFIX_.'anblogcat_shop`,
|
|
`'._DB_PREFIX_.'anblog_comment`,
|
|
`'._DB_PREFIX_.'anblog_blog`,
|
|
`'._DB_PREFIX_.'anblog_blog_lang`,
|
|
`'._DB_PREFIX_.'anblog_hooks`,
|
|
`'._DB_PREFIX_.'anblog_blog_categories`,
|
|
`'._DB_PREFIX_.'anblog_blog_widgets`,
|
|
`'._DB_PREFIX_.'anblog_blog_widgets_relations`,
|
|
`'._DB_PREFIX_.'anblog_blog_widgets_lang`,
|
|
`'._DB_PREFIX_.'anblog_blog_widgets_shop`,
|
|
`'._DB_PREFIX_.'anblog_likes`,
|
|
`'._DB_PREFIX_.'anblog_blog_shop`'
|
|
);
|
|
}
|
|
|
|
return parent::uninstall();
|
|
}
|
|
|
|
/**
|
|
* Creates tables
|
|
*/
|
|
protected function createTables()
|
|
{
|
|
$res = 1;
|
|
include_once dirname(__FILE__).'/install/install.php';
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
protected function installSample()
|
|
{
|
|
$res = 1;
|
|
include_once dirname(__FILE__).'/install/sample.php';
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
protected function installConfig()
|
|
{
|
|
$res = 1;
|
|
include_once dirname(__FILE__).'/config.php';
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* Hook ModuleRoutes
|
|
*/
|
|
public function hookModuleRoutes($route = '', $detail = array())
|
|
{
|
|
if ($this->context->controller instanceof AdminController && !Tools::getIsset('controller')) {
|
|
return false;
|
|
}//TODO check this
|
|
|
|
$config = AnblogConfig::getInstance();
|
|
$routes = array();
|
|
|
|
$category_rewrite = Configuration::get(anblog::PREFIX . 'category_rewrite', Context::getContext()->language->id);
|
|
$detail_rewrite = Configuration::get(anblog::PREFIX . 'detail_rewrite', Context::getContext()->language->id);
|
|
|
|
$routes['module-anblog-list'] = array(
|
|
'controller' => 'list',
|
|
'rule' => _AN_BLOG_REWRITE_ROUTE_.'.html',
|
|
'keywords' => array(
|
|
),
|
|
'params' => array(
|
|
'fc' => 'module',
|
|
'module' => 'anblog'
|
|
)
|
|
);
|
|
|
|
$routes['module-anblog-sitemap'] = array(
|
|
'controller' => 'sitemap',
|
|
'rule' => 'module/anblog/sitemap.xml',
|
|
'keywords' => array(
|
|
),
|
|
'params' => array(
|
|
'fc' => 'module',
|
|
'module' => 'anblog'
|
|
)
|
|
);
|
|
|
|
if (Configuration::get('PS_REWRITING_SETTINGS')) {
|
|
// URL HAVE ID
|
|
|
|
if ($detail_rewrite != ''){
|
|
$detail_rewrite = '/'. $detail_rewrite;
|
|
}
|
|
|
|
|
|
$endPrefix = '';
|
|
if (Configuration::get(anblog::PREFIX . 'cat_post_end_prefix')){
|
|
$endPrefix = '.html';
|
|
}
|
|
|
|
$routes['module-anblog-blog'] = array(
|
|
'controller' => 'blog',
|
|
'rule' => _AN_BLOG_REWRITE_ROUTE_.$detail_rewrite.'/{rewrite}'.$endPrefix,
|
|
'keywords' => array(
|
|
'id' => array('regexp' => '[0-9]+', 'param' => 'id'),
|
|
'rewrite' => array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'rewrite'),
|
|
),
|
|
'params' => array(
|
|
'fc' => 'module',
|
|
'module' => 'anblog',
|
|
|
|
)
|
|
);
|
|
|
|
if ($category_rewrite !=''){
|
|
$category_rewrite = '/'.$category_rewrite;
|
|
}
|
|
|
|
$categoryRule = _AN_BLOG_REWRITE_ROUTE_.$category_rewrite.'/{rewrite}';
|
|
if ($endPrefix == ''){
|
|
$categoryRule .= '/';
|
|
} else {
|
|
$categoryRule .= $endPrefix;
|
|
}
|
|
|
|
$routes['module-anblog-category'] = array(
|
|
'controller' => 'category',
|
|
'rule' => $categoryRule,
|
|
'keywords' => array(
|
|
'id' => array('regexp' => '[0-9]+', 'param' => 'id'),
|
|
'rewrite' => array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'rewrite'),
|
|
),
|
|
'params' => array(
|
|
'fc' => 'module',
|
|
'module' => 'anblog',
|
|
)
|
|
);
|
|
} else {
|
|
// REMOVE ID FROM URL
|
|
$category_rewrite = 'category_rewrite'.'_'.Context::getContext()->language->id;
|
|
$category_rewrite = Configuration::get(anblog::PREFIX . $category_rewrite, 'category');
|
|
$detail_rewrite = 'detail_rewrite'.'_'.Context::getContext()->language->id;
|
|
$detail_rewrite = Configuration::get(anblog::PREFIX . $detail_rewrite, 'detail');
|
|
|
|
$routes['module-anblog-blog'] = array(
|
|
'controller' => 'blog',
|
|
'rule' => _AN_BLOG_REWRITE_ROUTE_.'/'.$detail_rewrite.'/{rewrite}-b{id}.html',
|
|
'keywords' => array(
|
|
'id' => array('regexp' => '[0-9]+', 'param' => 'id'),
|
|
'rewrite' => array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'rewrite'),
|
|
),
|
|
'params' => array(
|
|
'fc' => 'module',
|
|
'module' => 'anblog',
|
|
)
|
|
);
|
|
|
|
$routes['module-anblog-category'] = array(
|
|
'controller' => 'category',
|
|
'rule' => _AN_BLOG_REWRITE_ROUTE_.'/'.$category_rewrite.'/{rewrite}-c{id}.html',
|
|
'keywords' => array(
|
|
'id' => array('regexp' => '[0-9]+', 'param' => 'id'),
|
|
'rewrite' => array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'rewrite'),
|
|
),
|
|
'params' => array(
|
|
'fc' => 'module',
|
|
'module' => 'anblog',
|
|
)
|
|
);
|
|
}
|
|
return $routes;
|
|
}
|
|
|
|
/**
|
|
* Run only one when install/change Theme_of_AN
|
|
*/
|
|
public function hookActionAdminBefore($params)
|
|
{
|
|
$this->unregisterHook('actionAdminBefore');
|
|
if (isset($params) && isset($params['controller']) && isset($params['controller']->theme_manager)) {
|
|
// Validate : call hook from theme_manager
|
|
} else {
|
|
// Other module call this hook -> duplicate data
|
|
return;
|
|
}
|
|
|
|
// FIX : update Prestashop by 1-Click module -> NOT NEED RESTORE DATABASE
|
|
$ap_version = Configuration::get('AP_CURRENT_VERSION');
|
|
if ($ap_version != false) {
|
|
$ps_version = Configuration::get('PS_VERSION_DB');
|
|
$versionCompare = version_compare($ap_version, $ps_version);
|
|
if ($versionCompare != 0) {
|
|
// Just update Prestashop
|
|
Configuration::updateValue('AP_CURRENT_VERSION', $ps_version);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// INSERT HOOK FROM MODULE_DATASAMPLE
|
|
if ($hook_from_theme == false) {
|
|
$this->registerANHook();
|
|
}
|
|
|
|
// WHEN INSTALL MODULE, NOT NEED RESTORE DATABASE IN THEME
|
|
$install_module = (int)Configuration::get('AP_INSTALLED_ANBLOG', 0);
|
|
if ($install_module) {
|
|
Configuration::updateValue('AP_INSTALLED_ANBLOG', '0');// next : allow restore sample
|
|
return;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Common method
|
|
* Resgister all hook for module
|
|
*/
|
|
public function registerANHook()
|
|
{
|
|
$res = true;
|
|
$res &= $this->registerHook('displayHeader');
|
|
$res &= $this->registerHook('moduleRoutes');
|
|
$res &= $this->registerHook('displayBackOfficeHeader');
|
|
$res &= $this->registerHook('displayHome');
|
|
$res &= $this->registerHook('displayHomeAfter');
|
|
$res &= $this->registerHook('displayContentWrapperBottom');
|
|
$res &= $this->registerHook('displayFooterProduct');
|
|
$res &= $this->registerHook('displayBlogWidget');
|
|
$res &= $this->registerHook('gSitemapAppendUrls');
|
|
|
|
|
|
// Multishop create new shop
|
|
// $res &= $this->registerHook('actionAdminShopControllerSaveAfter');
|
|
return $res;
|
|
}
|
|
|
|
public function regenerateThumbs()
|
|
{
|
|
$query = '
|
|
SELECT c.id_anblog_blog, c.image
|
|
FROM '._DB_PREFIX_.'anblog_blog c';
|
|
$data = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
|
|
|
|
if (count($data)) {
|
|
foreach ($data as $post) {
|
|
$anblogImage = new AnblogImage($post);
|
|
$anblogImage->delete(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function hookDisplayHome($params)
|
|
{
|
|
return $this->getWidgets('DisplayHome');
|
|
}
|
|
|
|
public function hookDisplayHomeAfter($params)
|
|
{
|
|
return $this->getWidgets('displayHomeAfter');
|
|
}
|
|
|
|
public function hookDisplayBlogWidget($params)
|
|
{
|
|
return $this->getWidgets('displayBlogWidget');
|
|
}
|
|
|
|
public function hookDisplayContentWrapperBottom($params)
|
|
{
|
|
return $this->getWidgets('displayContentWrapperBottom');
|
|
}
|
|
|
|
public function hookDisplayFooterProduct($params)
|
|
{
|
|
if (isset($params['product']['id_product'])){
|
|
return $this->getWidgets('displayFooterProduct', $params['product']['id_product']);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function getPostsBlogs($id_anblogcat, $limit, $sort = ''){
|
|
|
|
$config = AnblogConfig::getInstance();
|
|
|
|
$articles = [];
|
|
|
|
$articles = AnblogBlog::getListBlogs(
|
|
$id_anblogcat,
|
|
$this->context->language->id,
|
|
1,
|
|
$limit,
|
|
'date_add',
|
|
'DESC',
|
|
array(),
|
|
true,
|
|
null,
|
|
$sort
|
|
);
|
|
|
|
$config = AnblogConfig::getInstance();
|
|
$helper = AnblogHelper::getInstance();
|
|
|
|
$authors = array();
|
|
foreach ($articles as $key => $article) {
|
|
$article = AnblogHelper::buildBlog($helper, $article, 'anblog_listing_leading_img', $config);
|
|
if ($article['id_employee']) {
|
|
if (!isset($authors[$article['id_employee']])) {
|
|
$authors[$article['id_employee']] = new Employee($article['id_employee']);
|
|
}
|
|
if ($article['author_name'] != '') {
|
|
$article['author'] = $article['author_name'];
|
|
$article['author_link'] = $helper->getBlogAuthorLink($article['author_name']);
|
|
} else {
|
|
$article['author'] = $authors[$article['id_employee']]->firstname.' '.$authors[$article['id_employee']]->lastname;
|
|
$article['author_link'] = $helper->getBlogAuthorLink($authors[$article['id_employee']]->id);
|
|
}
|
|
} else {
|
|
$article['author'] = '';
|
|
$article['author_link'] = '';
|
|
}
|
|
$articles[$key] = $article;
|
|
}
|
|
|
|
return $articles;
|
|
|
|
}
|
|
public function getWidgets($hookName, $idProduct = '')
|
|
{
|
|
$showOn = anBlogWidgets::$showOn;
|
|
|
|
$pageName = $this->context->controller->getPageName();
|
|
$idShowOn = '';
|
|
foreach ($showOn as $key => $val){
|
|
if (in_array($pageName, $val['pageName']) && in_array($hookName, $val['hook'])){
|
|
|
|
$idShowOn = $key;
|
|
|
|
}
|
|
}
|
|
if ($idShowOn == ''){
|
|
return;
|
|
}
|
|
|
|
if ($idProduct != ''){
|
|
$blogWidgets = anBlogWidgets::getWidgetsByIdProduct($idProduct);
|
|
} else {
|
|
$blogWidgets = anBlogWidgets::getBlogWidgets($idShowOn);
|
|
}
|
|
|
|
if (count($blogWidgets) == 0){
|
|
return;
|
|
}
|
|
|
|
$config = AnblogConfig::getInstance();
|
|
|
|
$widgetHtml = '';
|
|
foreach ($blogWidgets as $widget){
|
|
if ($widget['limit'] > 0) {
|
|
$articles = $this->getPostsBlogs($widget['id_anblogcat'], $widget['limit'], $widget['sort']);
|
|
|
|
$this->smarty->assign(
|
|
array(
|
|
'titleWidget' => $widget['title'],
|
|
'slider' => $widget['slider'],
|
|
'articles' => $articles,
|
|
'config' => $config,
|
|
'title' => Configuration::get(anblog::PREFIX . 'hook_header_' . $this->context->language->id, ''),
|
|
'columnCount' => 3
|
|
)
|
|
);
|
|
$this->smarty->assign('anblog_main_page', AnblogHelper::getInstance()->getFontBlogLink());
|
|
$this->smarty->assign('anblog_imageTypes', $this->getImageTypesForTpl());
|
|
$widgetHtml = $widgetHtml . $this->display(__FILE__, 'views/templates/hook/universal174.tpl');
|
|
}
|
|
}
|
|
|
|
return $widgetHtml;
|
|
}
|
|
|
|
/**
|
|
* @param array $params
|
|
* @return string
|
|
*/
|
|
|
|
public function getImageTypesForTpl()
|
|
{
|
|
$imageTypes = [];
|
|
foreach ($this->imageTypes as $it){
|
|
$imageTypes[$it['name']] = $it;
|
|
}
|
|
return $imageTypes;
|
|
}
|
|
|
|
public function translateFrontBlog()
|
|
{
|
|
return array(
|
|
'thanks' => $this->l('Thanks for your comment, it will be published soon!'),
|
|
'error' => $this->l('An error occurred while sending the comment. Please recorrect data in fields!'),
|
|
'recapcha' => $this->l('Please submit reCAPTCHA'),
|
|
'blog' => $this->l('Blog'),
|
|
);
|
|
}
|
|
|
|
public function checkIssetImageTypes()
|
|
{
|
|
$existingImageTypes = Db::getInstance()->executeS('
|
|
SELECT *
|
|
FROM `'._DB_PREFIX_.'image_type`
|
|
WHERE `name`LIKE \'anblog_%\'');
|
|
|
|
$existingImageTypesNames = [];
|
|
foreach ($existingImageTypes as $item){
|
|
$existingImageTypesNames[] = $item['name'];
|
|
}
|
|
|
|
$errorImageTypes = [];
|
|
foreach ($this->imageTypes as $id => $item){
|
|
if (!in_array($item['name'], $existingImageTypesNames)){
|
|
$errorImageTypes[] = 'Image type "' . $item['name'] . '" does not exist.';
|
|
}
|
|
}
|
|
|
|
return $errorImageTypes;
|
|
}
|
|
|
|
public function getAllConfig()
|
|
{
|
|
$allConfig = [];
|
|
|
|
foreach ($this->defaultSettings as $key => $value) {
|
|
if (in_array($key, $this->valuesWithLang)) {
|
|
$allConfig[$key] = Configuration::get(anblog::PREFIX . $key , $this->context->language->id, $value);
|
|
} else {
|
|
$allConfig[$key] = Configuration::get(anblog::PREFIX . $key , null, $value);
|
|
}
|
|
}
|
|
|
|
return $allConfig;
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function createAdminTabs($tabs, $controller_name)
|
|
{
|
|
$id_lang = $this->context->language->id;
|
|
$link = $this->context->link;
|
|
|
|
foreach ($tabs as &$tab0) {
|
|
if ($tab0['class_name'] == 'IMPROVE') {
|
|
foreach ($tab0['sub_tabs'] as &$tab1) {
|
|
if ($tab1['class_name'] == 'AdminAnblogManagement') {
|
|
|
|
foreach ($tab1['sub_tabs'] as &$tab2) {
|
|
if ($tab2['class_name'] == $controller_name) {
|
|
$sub_tabs = &$tab2['sub_tabs'];
|
|
|
|
foreach ($this->_tabs as $moduleTab){
|
|
if (isset($moduleTab['displayTab']) && $moduleTab['displayTab']){
|
|
$tab = Tab::getTab($id_lang, Tab::getIdFromClassName($moduleTab['class_name']));
|
|
$tab['current'] = false;
|
|
if ($controller_name == $moduleTab['class_name']){
|
|
$tab['current'] = true;
|
|
}
|
|
$tab['href'] = $link->getAdminLink($moduleTab['class_name']);
|
|
$tab['active'] = true;
|
|
|
|
if (isset($this->tabDisplayTranslate[$moduleTab['class_name']])){
|
|
$tab['name'] = $this->tabDisplayTranslate[$moduleTab['class_name']];
|
|
} else {
|
|
$tab['name'] = $moduleTab['name'];
|
|
}
|
|
|
|
$sub_tabs[] = $tab;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
// break;
|
|
}
|
|
}
|
|
// break;
|
|
}
|
|
}
|
|
|
|
return $tabs;
|
|
}
|
|
|
|
public function tabAdd($tab, $module)
|
|
{
|
|
if (count($tab) == 0){
|
|
return false;
|
|
}
|
|
|
|
$languages = Language::getLanguages();
|
|
|
|
$_tab = new Tab();
|
|
$_tab->active = $tab['active'];
|
|
$_tab->class_name = $tab['class_name'];
|
|
if (isset($tab['icon'])){
|
|
$_tab->icon = $tab['icon'];
|
|
}
|
|
$_tab->id_parent = Tab::getIdFromClassName($tab['parent']);
|
|
if (empty($_tab->id_parent)) {
|
|
$_tab->id_parent = 0;
|
|
}
|
|
|
|
$_tab->module = $module->name;
|
|
foreach ($languages as $language) {
|
|
$_tab->name[$language['id_lang']] = $module->l($tab['name']);
|
|
}
|
|
|
|
$_tab->add();
|
|
|
|
return true;
|
|
}
|
|
|
|
public function tabDelete($tab)
|
|
{
|
|
if (count($tab) == 0){
|
|
return false;
|
|
}
|
|
|
|
$_tab_id = Tab::getIdFromClassName($tab['class_name']);
|
|
$_tab = new Tab($_tab_id);
|
|
$_tab->delete();
|
|
|
|
return true;
|
|
}
|
|
}
|