Files
newwalls.pl/modules/ph_simpleblog/ph_simpleblog.php
2024-12-17 13:43:22 +01:00

766 lines
26 KiB
PHP

<?php
/**
* Blog for PrestaShop module by Krystian Podemski from PrestaHome.
*
* @author Krystian Podemski <krystian@prestahome.com>
* @copyright Copyright (c) 2008-2019 Krystian Podemski - www.PrestaHome.com / www.Podemski.info
* @license You only can use module, nothing more!
*/
if (!defined('THUMBLIB_BASE_PATH') && file_exists(_PS_MODULE_DIR_.'ph_simpleblog/assets/phpthumb/ThumbLib.inc.php')) {
require_once _PS_MODULE_DIR_.'ph_simpleblog/assets/phpthumb/ThumbLib.inc.php';
}
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogCategory.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogPost.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogPostType.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogPostImage.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogTag.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogComment.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/models/SimpleBlogPostAuthor.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/classes/SimpleBlogHelper.php';
require_once _PS_MODULE_DIR_.'ph_simpleblog/classes/BlogPostsFinder.php';
define('_SIMPLEBLOG_GALLERY_DIR_', _PS_MODULE_DIR_.'ph_simpleblog/galleries/');
define('_SIMPLEBLOG_GALLERY_URL_', _MODULE_DIR_.'ph_simpleblog/galleries/');
if (!defined('_PS_VERSION_')) {
exit;
}
class ph_simpleblog extends Module
{
public $is_16;
public $is_17;
// Not used at this moment, some issues with PrestaShop 1.7.x
public $moduleTabs = array(
array(
'name' => array(
'en' => 'Blog for PrestaShop',
'pl' => 'Blog dla PrestaShop',
),
'class_name' => 'AdminBlogForPrestaShop',
'parent_class_name' => 'IMPROVE',
),
array(
'name' => array(
'en' => 'Posts',
'pl' => 'Wpisy',
),
'class_name' => 'AdminSimpleBlogPosts',
'parent_class_name' => 'AdminBlogForPrestaShop',
),
array(
'name' => array(
'en' => 'Categories',
'pl' => 'Kategorie',
),
'class_name' => 'AdminSimpleBlogCategories',
'parent_class_name' => 'AdminBlogForPrestaShop',
),
array(
'name' => array(
'en' => 'Comments',
'pl' => 'Komentarze',
),
'class_name' => 'AdminSimpleBlogComments',
'parent_class_name' => 'AdminBlogForPrestaShop',
),
array(
'name' => array(
'en' => 'Tags',
'pl' => 'Tagi',
),
'class_name' => 'AdminSimpleBlogTags',
'parent_class_name' => 'AdminBlogForPrestaShop',
),
array(
'name' => array(
'en' => 'Authors',
'pl' => 'Autorzy',
),
'class_name' => 'AdminSimpleBlogAuthors',
'parent_class_name' => 'AdminBlogForPrestaShop',
),
array(
'name' => array(
'en' => 'Settings',
'pl' => 'Ustawienia',
),
'class_name' => 'AdminSimpleBlogSettings',
'parent_class_name' => 'AdminBlogForPrestaShop',
),
);
public function __construct()
{
$this->name = 'ph_simpleblog';
$this->tab = 'front_office_features';
$this->version = '1.7.0';
$this->author = 'PrestaHome';
$this->need_instance = 0;
$this->is_configurable = 1;
$this->ps_versions_compliancy['min'] = '1.6';
$this->ps_versions_compliancy['max'] = _PS_VERSION_;
$this->secure_key = Tools::encrypt($this->name);
$this->is_16 = (version_compare(_PS_VERSION_, '1.6.0', '>=') === true && version_compare(_PS_VERSION_, '1.7.0', '<') === true) ? true : false;
$this->is_17 = (version_compare(_PS_VERSION_, '1.7.0', '>=') === true) ? true : false;
$this->controllers = array('single', 'list', 'category', 'categorypage', 'page', 'author', 'authorslist');
$this->bootstrap = true;
if (Shop::isFeatureActive()) {
Shop::addTableAssociation('simpleblog_category', array('type' => 'shop'));
Shop::addTableAssociation('simpleblog_post', array('type' => 'shop'));
}
parent::__construct();
$this->displayName = $this->l('Blog for PrestaShop');
$this->description = $this->l('Adds a blog to your PrestaShop store');
$this->confirmUninstall = $this->l('Are you sure you want to delete this module?');
if ($this->id && !$this->isRegisteredInHook('moduleRoutes')) {
$this->registerHook('moduleRoutes');
}
if ($this->id && !$this->isRegisteredInHook('displayPrestaHomeBlogAfterPostContent')) {
$this->registerHook('displayPrestaHomeBlogAfterPostContent');
}
if ($this->id && $this->is_17) {
setlocale(LC_TIME, str_replace('-', '_', $this->context->language->locale));
}
// $this->registerHook('gSitemapAppendUrls');
}
public function install()
{
if (Shop::isFeatureActive()) {
Shop::setContext(Shop::CONTEXT_ALL);
}
// Hooks & Install
return parent::install()
&& $this->prepareModuleSettings()
&& $this->registerHook('moduleRoutes')
&& $this->registerHook('displaySimpleBlogPosts')
&& $this->registerHook('displaySimpleBlogCategories')
&& $this->registerHook('displayHeader')
&& $this->registerHook('displayTop')
&& $this->registerHook('displayBackOfficeHeader')
&& $this->registerHook('displayPrestaHomeBlogAfterPostContent')
&& $this->registerHook('displayLeftColumn');
}
/**
* Install module tab with specified arguments.
*
* @param string $name
* @param string $className
* @param int $id_parent
*
* @return object new Tab instance
*/
public function myInstallModuleTab($name, $className, $id_parent)
{
$tab = new Tab();
$tab->name = array();
$tab->class_name = $className;
if ($className == 'AdminBlogForPrestaShop' && $this->is_17) {
$tab->icon = 'note';
}
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = $name;
}
$tab->id_parent = (int) $id_parent;
$tab->module = $this->name;
if ($tab->save()) {
return $tab;
}
}
/**
* Delete module tabs.
*/
public function myDeleteModuleTabs()
{
$tabs = array(
'AdminSimpleBlog',
'AdminSimpleBlogCategories',
'AdminSimpleBlogPosts',
'AdminSimpleBlogSettings',
'AdminSimpleBlogTags',
'AdminSimpleBlogComments',
'AdminSimpleBlogAuthors',
'AdminBlogForPrestaShop',
'AdminSimpleBlogPostsParent',
);
$idTabs = array();
foreach ($tabs as $className) {
$idTabs[] = Tab::getIdFromClassName($className);
}
foreach ($idTabs as $idTab) {
if ($idTab) {
$tab = new Tab($idTab);
if (Validate::isLoadedObject($tab)) {
$tab->delete();
}
}
}
}
/**
* Install all module tabs.
*/
public function createAllModuleTabs($force = false)
{
// Main tab
$mainTab = $this->myInstallModuleTab(
$this->l('Blog for PrestaShop'),
$this->is_17 ? 'AdminBlogForPrestaShop' : 'AdminSimpleBlog',
Tab::getIdFromClassName('IMPROVE')
);
// Posts
$this->myInstallModuleTab(
$this->l('Posts'),
'AdminSimpleBlogPosts',
(int) $mainTab->id
);
// Categories
$this->myInstallModuleTab(
$this->l('Categories'),
'AdminSimpleBlogCategories',
(int) $mainTab->id
);
// Comments
$this->myInstallModuleTab(
$this->l('Comments'),
'AdminSimpleBlogComments',
(int) $mainTab->id
);
// Tags
$this->myInstallModuleTab(
$this->l('Tags'),
'AdminSimpleBlogTags',
(int) $mainTab->id
);
// Authors
$this->myInstallModuleTab(
$this->l('Authors'),
'AdminSimpleBlogAuthors',
(int) $mainTab->id
);
// Settings
$this->myInstallModuleTab(
$this->l('Settings'),
'AdminSimpleBlogSettings',
(int) $mainTab->id
);
}
/**
* This methods check wether we need to update db schema because of
* well known problem between ~1.6.0.4 and 1.6.0.6 where "hide_post_mode" wasn't available.
*/
protected function checkDatabaseIntegrationProblems()
{
$sql = 'SHOW COLUMNS FROM `'._DB_PREFIX_.'tab`';
$tab_columns = Db::getInstance()->executeS($sql);
$createColumn = true;
foreach ($tab_columns as $column) {
if ($column['Field'] == 'hide_host_mode') {
$createColumn = false;
}
}
if ($createColumn == true) {
Db::getInstance()->query('ALTER TABLE `'._DB_PREFIX_.'tab` ADD `hide_host_mode` tinyint(1) NOT NULL DEFAULT 0 AFTER `active`');
}
}
/**
* Setup default content for module.
*/
protected function setupBlogDefaultContent()
{
// Default category
$simple_blog_category = new SimpleBlogCategory();
foreach (Language::getLanguages(true) as $lang) {
$simple_blog_category->name[$lang['id_lang']] = 'News';
}
foreach (Language::getLanguages(true) as $lang) {
$simple_blog_category->link_rewrite[$lang['id_lang']] = 'news';
}
$simple_blog_category->add();
$simple_blog_category->associateTo(Shop::getCompleteListOfShopsID());
// Post Types
$default_post_type = new SimpleBlogPostType();
$default_post_type->name = 'Post';
$default_post_type->slug = 'post';
$default_post_type->description = $this->l('Default type of post');
$default_post_type->add();
$gallery_post_type = new SimpleBlogPostType();
$gallery_post_type->name = 'Gallery';
$gallery_post_type->slug = 'gallery';
$gallery_post_type->add();
$external_url_post_type = new SimpleBlogPostType();
$external_url_post_type->name = $this->l('External URL');
$external_url_post_type->slug = 'url';
$external_url_post_type->add();
$video_post_type = new SimpleBlogPostType();
$video_post_type->name = $this->l('Video');
$video_post_type->slug = 'video';
$video_post_type->add();
}
public static function getLanguagesIDs()
{
$langs = Language::getLanguages(false);
$ids = array();
foreach ($langs as $lang) {
$ids[] = $lang['id_lang'];
}
return $ids;
}
protected function getSimpleBlogSettings()
{
if (function_exists('date_default_timezone_get')) {
$timezone = @date_default_timezone_get();
} else {
$timezone = 'Europe/Warsaw';
}
return array(
'PH_BLOG_SLUG' => 'blog',
'PH_BLOG_POSTS_PER_PAGE' => 10,
'PH_BLOG_FB_COMMENTS' => true,
'PH_BLOG_COLUMNS' => 'prestashop',
'PH_BLOG_LAYOUT' => 'default',
'PH_BLOG_LIST_LAYOUT' => 'grid',
'PH_BLOG_GRID_COLUMNS' => 2,
'PH_BLOG_MAIN_TITLE' => array_fill_keys(self::getLanguagesIDs(), $this->l('Blog - whats new?')),
'PH_BLOG_LOAD_FA' => false,
'PH_BLOG_DISPLAY_AUTHOR' => true,
'PH_BLOG_DISPLAY_DATE' => true,
'PH_BLOG_DISPLAY_THUMBNAIL' => true,
'PH_BLOG_DISPLAY_CATEGORY' => true,
'PH_BLOG_DISPLAY_SHARER' => true,
'PH_BLOG_DISPLAY_TAGS' => true,
'PH_BLOG_DISPLAY_DESCRIPTION' => true,
'PH_BLOG_THUMB_METHOD' => 1,
'PH_BLOG_THUMB_X' => 600,
'PH_BLOG_THUMB_Y' => 300,
'PH_BLOG_THUMB_X_WIDE' => 900,
'PH_BLOG_THUMB_Y_WIDE' => 350,
'PH_BLOG_DISPLAY_CAT_DESC' => true,
'PH_BLOG_POST_BY_AUTHOR' => true,
'PH_BLOG_FB_INIT' => true,
'PH_BLOG_DISPLAY_FEATURED' => true,
'PH_BLOG_DISPLAY_BREADCRUMBS' => true,
'PH_BLOG_DISPLAY_FEATURED' => true,
'PH_BLOG_DISPLAY_CATEGORY_IMAGE' => true,
'PH_BLOG_DISPLAY_LIKES' => true,
'PH_BLOG_DISPLAY_VIEWS' => true,
'PH_CATEGORY_IMAGE_X' => 900,
'PH_CATEGORY_IMAGE_Y' => 250,
'PH_CATEGORY_SORTBY' => 'position',
'PH_BLOG_DATEFORMAT' => '%B %e, %Y',
'PH_BLOG_NATIVE_COMMENTS' => true,
'PH_BLOG_COMMENT_NOTIFICATIONS' => true,
'PH_BLOG_NEW_AUTHORS' => 0,
'PH_BLOG_AUTHOR_INFO' => true,
'PH_BLOG_COMMENT_AUTO_APPROVAL' => false,
'PH_BLOG_COMMENT_ALLOW' => true,
'PH_BLOG_COMMENT_STUFF_HIGHLIGHT' => true,
'PH_BLOG_COMMENT_NOTIFY_EMAIL' => Configuration::get('PS_SHOP_EMAIL'),
'PH_BLOG_FACEBOOK_MODERATOR' => '',
'PH_BLOG_FACEBOOK_APP_ID' => '',
'PH_BLOG_FACEBOOK_COLOR_SCHEME' => 'light',
'PH_BLOG_DISPLAY_MORE' => true,
'PH_BLOG_MASONRY_LAYOUT' => false,
'PH_BLOG_TIMEZONE' => $timezone,
'PH_BLOG_LOAD_FONT_AWESOME' => true,
'PH_BLOG_LOAD_BXSLIDER' => true,
'PH_BLOG_LOAD_MASONRY' => true,
'PH_BLOG_LOAD_FITVIDS' => true,
'PH_BLOG_DISPLAY_RELATED' => true,
'PH_BLOG_COMMENT_ALLOW_GUEST' => false,
'PH_BLOG_COMMENTS_RECAPTCHA' => true,
'PH_BLOG_COMMENTS_RECAPTCHA_SITE_KEY' => '',
'PH_BLOG_COMMENTS_RECAPTCHA_SECRET_KEY' => '',
'PH_BLOG_COMMENTS_RECAPTCHA_THEME' => 'light',
'PH_BLOG_RELATED_PRODUCTS_USE_DEFAULT_LIST' => false,
'PH_BLOG_ADVERTISING' => true,
'PH_BLOG_COMMENTS_SYSTEM' => 'native',
'PH_BLOG_DISQUS_SHORTNAME' => 'blogforprestashop',
'PH_BLOG_CANONICAL' => '',
'PH_BLOG_IMAGE_FBSHARE' => 'featured',
);
}
public function prepareModuleSettings()
{
// Database
$sql = array();
include_once dirname(__FILE__).'/init/install_sql.php';
foreach ($sql as $s) {
if (!Db::getInstance()->Execute($s)) {
die('Error while creating DB');
}
}
$this->checkDatabaseIntegrationProblems();
// Tabs
$this->createAllModuleTabs();
// Default content
$this->setupBlogDefaultContent();
// Settings
foreach ($this->getSimpleBlogSettings() as $key => $value) {
Configuration::updateValue($key, $value);
}
// For theme developers, you're welcome!
if (file_exists(_PS_MODULE_DIR_.$this->name.'/init/my-install.php')) {
include_once _PS_MODULE_DIR_.$this->name.'/init/my-install.php';
}
return true;
}
public function uninstall()
{
// Database
$sql = array();
include_once dirname(__FILE__).'/init/uninstall_sql.php';
foreach ($sql as $s) {
if (!Db::getInstance()->Execute($s)) {
return false;
}
}
// Settings
foreach ($this->getSimpleBlogSettings() as $key => $value) {
Configuration::deleteByName($key);
}
// Tabs
$this->myDeleteModuleTabs();
// For theme developers - you're welcome!
if (file_exists(_PS_MODULE_DIR_.$this->name.'/init/my-uninstall.php')) {
include_once _PS_MODULE_DIR_.$this->name.'/init/my-uninstall.php';
}
if (!parent::uninstall()) {
return false;
}
return true;
}
protected function myAssignModuleAssets()
{
if ($this->is_16) {
if (Configuration::get('PH_BLOG_LOAD_BXSLIDER')) {
$this->context->controller->addCSS($this->_path.'css/jquery.bxslider.css');
}
if (Configuration::get('PH_BLOG_LOAD_FONT_AWESOME')) {
$this->context->controller->addCSS($this->_path.'css/font-awesome.css');
}
$this->context->controller->addCSS($this->_path.'css/ph_simpleblog.css');
$this->context->controller->addCSS($this->_path.'css/custom.css');
if (Configuration::get('PH_BLOG_LOAD_FITVIDS')) {
$this->context->controller->addJS($this->_path.'js/jquery.fitvids.js');
}
if (Configuration::get('PH_BLOG_LOAD_BXSLIDER')) {
$this->context->controller->addJS($this->_path.'js/jquery.bxslider.min.js');
}
$this->context->controller->addJS($this->_path.'js/ph_simpleblog.js');
$this->context->controller->addJqueryPlugin(array('bxslider', 'fancybox'));
if (Configuration::get('PH_BLOG_MASONRY_LAYOUT') && Configuration::get('PH_BLOG_LOAD_MASONRY')) {
$this->context->controller->addJS($this->_path.'js/isotope.pkgd.min.js');
$this->context->controller->addJS($this->_path.'js/ph_simpleblog_masonry.js');
}
}
if ($this->is_17) {
$this->context->controller->registerStylesheet('modules-phsimpleblog', 'modules/'.$this->name.'/views/css/ph_simpleblog-17.css', array('media' => 'all', 'priority' => 150));
$this->context->controller->registerStylesheet('modules-phsimpleblog-custom', 'modules/'.$this->name.'/css/custom.css', array('position' => 'bottom', 'priority' => 150));
$this->context->controller->registerJavascript('modules-phsimpleblog', 'modules/'.$this->name.'/views/js/ph_simpleblog-17.js', array('position' => 'bottom', 'priority' => 150));
if (Configuration::get('PH_BLOG_LOAD_FITVIDS')) {
$this->context->controller->addJS($this->_path.'js/jquery.fitvids.js');
}
$this->context->controller->addJqueryPlugin(array('fancybox'));
$this->context->controller->requireAssets(array('font-awesome-css'));
}
}
public function hookDisplayHeader($params)
{
$this->myAssignModuleAssets();
if (Tools::getValue('module') && Tools::getValue('module') == 'ph_simpleblog' && Tools::getValue('controller') == 'single') {
$post = $this->context->controller->getPost();
$imageForFacebook = Configuration::get('PH_BLOG_IMAGE_FBSHARE', 'featured') == 'featured' ? 'featured_image' : 'banner';
$this->context->smarty->assign(array(
'post_url' => $post->url,
'post_title' => $post->title,
'post_description' => strip_tags($post->short_content),
'post_image' => rtrim($this->context->shop->getBaseUrl(true, false), '/').$post->{$imageForFacebook},
));
Media::addJsDef(
array(
'ph_sharing_name' => addcslashes($post->title, "'"),
'ph_sharing_url' => addcslashes($post->url, "'"),
'ph_sharing_img' => addcslashes(rtrim($this->context->shop->getBaseUrl(true, false), '/').$post->{$imageForFacebook}, "'"),
)
);
return $this->display(__FILE__, 'header.tpl');
}
}
public function hookModuleRoutes($params)
{
if (Tools::getIsset('SubmitGsitemap')) {
return array();
}
$blog_slug = Configuration::get('PH_BLOG_SLUG');
$routes = array(
// Home list
'module-ph_simpleblog-list' => array(
'controller' => 'list',
'rule' => $blog_slug,
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
// Home pagination
'module-ph_simpleblog-page' => array(
'controller' => 'page',
'rule' => $blog_slug.'/page/{p}',
'keywords' => array(
'p' => array(
'regexp' => '[_a-zA-Z0-9-\pL]*',
'param' => 'p',
),
),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
// Authors list
'module-ph_simpleblog-authorslist' => array(
'controller' => 'authorslist',
'rule' => $blog_slug.'/'.Tools::link_rewrite($this->l('authors')),
'keywords' => array(),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
// Category list
'module-ph_simpleblog-category' => array(
'controller' => 'category',
'rule' => $blog_slug.'/{sb_category}',
'keywords' => array(
'sb_category' => array(
'regexp' => '[_a-zA-Z0-9-\pL]*',
'param' => 'sb_category',
),
),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
// Single author page
'module-ph_simpleblog-author' => array(
'controller' => 'author',
'rule' => $blog_slug.'/'.Tools::link_rewrite($this->l('author')).'/{author_id}',
'keywords' => array(
'author_id' => array(
'regexp' => '[0-9]+',
'param' => 'author_id',
),
),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
// Category pagination
'module-ph_simpleblog-categorypage' => array(
'controller' => 'categorypage',
'rule' => $blog_slug.'/{sb_category}/page/{p}',
'keywords' => array(
'p' => array(
'regexp' => '[_a-zA-Z0-9-\pL]*',
'param' => 'p',
),
'sb_category' => array(
'regexp' => '[_a-zA-Z0-9-\pL]*',
'param' => 'sb_category',
),
),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
// Single
'module-ph_simpleblog-single' => array(
'controller' => 'single',
'rule' => $blog_slug.'/{sb_category}/{rewrite}',
'keywords' => array(
'sb_category' => array(
'regexp' => '[_a-zA-Z0-9-\pL]*',
'param' => 'sb_category',
),
'rewrite' => array(
'regexp' => '[_a-zA-Z0-9-\pL]*',
'param' => 'rewrite',
),
),
'params' => array(
'fc' => 'module',
'module' => 'ph_simpleblog',
),
),
);
return $routes;
}
public static function myRealURL()
{
return Context::getContext()->shop->getBaseUrl(true);
}
public static function getLink()
{
return Context::getContext()->link->getModuleLink('ph_simpleblog', 'list');
}
public function prepareSimpleBlogCategories()
{
$this->context->smarty->assign(array(
'categories' => SimpleBlogCategory::getCategories($this->context->language->id, true),
));
}
public function hookDisplaySimpleBlogCategories($params)
{
$this->prepareSimpleBlogCategories();
if (isset($params['template'])) {
return $this->display(__FILE__, $params['template'].'.tpl');
} else {
return $this->hookDisplayLeftColumn($params);
}
}
public function hookDisplayLeftColumn($params)
{
$this->prepareSimpleBlogCategories();
if ($this->is_17) {
return $this->fetch('module:'.$this->name.'/views/templates/hook/1.7/left-column.tpl');
}
return $this->display(__FILE__, 'left-column.tpl');
}
public function hookDisplayRightColumn($params)
{
return $this->hookDisplayLeftColumn($params);
}
public function hookDisplayHome($params)
{
return $this->hookDisplayLeftColumn($params);
}
public function hookDisplayFooter($params)
{
return $this->hookDisplayLeftColumn($params);
}
public function hookDisplayBackOfficeHeader()
{
if (method_exists($this->context->controller, 'addCSS')) {
$this->context->controller->addCSS(($this->_path).'css/simpleblog-admin.css', 'all');
}
}
public function hookDisplayPrestaHomeBlogAfterPostContent($params)
{
if ($this->is_17) {
return $this->fetch('module:'.$this->name.'/views/templates/hook/1.7/after-post-content.tpl');
}
return $this->display(__FILE__, 'after-post-content.tpl');
}
public function getContent()
{
$this->smarty->assign('phpWarning', version_compare(phpversion(), '5.6', '<'));
$this->smarty->assign('module_path', _MODULE_DIR_.'ph_simpleblog/');
$this->smarty->assign('shopUrl', $this->context->shop->getBaseUrl());
return $this->display(__FILE__, 'views/templates/admin/welcome.tpl');
}
public function hookgSitemapAppendUrls($params)
{
// na
}
}