Files
interblue.pl/modules/ps_mbo/ps_mbo.php
2024-10-25 14:16:28 +02:00

849 lines
34 KiB
PHP

<?php
/**
* 2007-2018 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2018 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
**/
if (!defined('_PS_VERSION_')) {
exit;
}
use PrestaShop\PrestaShop\Adapter\SymfonyContainer;
use PrestaShopBundle\Service\DataProvider\Admin\AddonsInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class ps_mbo extends Module
{
public $mytabs = array(
array(
'name' => array(
'en' => 'Selection'
),
'visible' => true,
'class_name' => 'AdminPsMboModule',
'parent_class_name' => 'AdminParentModulesCatalog',
'core_reference' => 'AdminModulesCatalog',
),
array(
'name' => array(
'en' => 'Theme catalog'
),
'visible' => true,
'class_name' => 'AdminPsMboTheme',
'parent_class_name' => 'AdminParentThemes',
'core_reference' => 'AdminThemesCatalog',
)
);
/**
* Links to the admin controllers created by the module
*/
protected $front_controller = null;
public function __construct()
{
$this->name = 'ps_mbo';
$this->version = '1.1.1';
$this->author = 'PrestaShop';
$this->module_key = '6cad5414354fbef755c7df4ef1ab74eb';
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('PrestaShop Marketplace in your Back Office');
$this->description = $this->l('Discover the best PrestaShop modules to optimize your online store.');
$this->controller_name = array('AdminPsMboModule', 'AdminPsMboTheme');
$this->template_dir = '../../../../modules/' . $this->name . '/views/templates/admin/';
$this->css_path = $this->_path . 'views/css/';
$this->js_path = $this->_path . 'views/js/';
}
/**
* install()
*
* @param none
* @return bool
*/
public function install()
{
if (!parent::install()
|| !$this->registerHook('backOfficeHeader')
|| !$this->registerHook('displayDashboardToolbarTopMenu')
|| !$this->registerHook('displayAdminNavBarBeforeEnd')
|| !$this->registerHook('displayDashboardToolbarIcons')
|| !$this->registerHook('displayAdminEndContent')
|| !$this->installTabs()
) {
$this->_errors[] = $this->l('There was an error during the installation.');
return false;
}
return true;
}
protected function installTabs()
{
foreach ($this->mytabs as $data) {
$names = array();
foreach (Language::getLanguages(false) as $lang) {
$names[(int) $lang['id_lang']] = reset($data['name']);
}
$position = 0;
$oldTabId = Tab::getIdFromClassName($data['core_reference']);
if ($oldTabId !== false) {
$catalogTab = new Tab($oldTabId);
$names = $catalogTab->name;
$position = $catalogTab->position;
$catalogTab->active = false;
$catalogTab->save();
}
$tab = new Tab();
$tab->module = $this->name;
$tab->class_name = $data['class_name'];
$tab->position = (int) $position;
$tab->visible = true;
$tab->id_parent = Tab::getIdFromClassName($data['parent_class_name']);
$tab->name = $names;
$tab->save();
// Second save only for position
$tab->position = (int) $position;
$tab->save();
}
return true;
}
public function fetchModules($controller)
{
$controllerWhiteList = array('AdminCarriers', 'AdminPayment');
if (!in_array($controller, $controllerWhiteList)) {
return false;
}
$data = array();
switch ($controller) {
case 'AdminCarriers':
$modules = $this->getCarriersMboModules();
$data['panel_id'] = 'recommended-carriers-panel';
$data['panel_title'] = $this->trans(
'Use one of our recommended carrier modules',
[],
'Admin.Shipping.Feature'
);
break;
case 'AdminPayment':
$modules = $this->getPaymentMboModules();
break;
}
if (empty($modules)) {
return false;
}
if ((int) Tools::getValue('legacy') == 0) {
foreach ($modules as &$module) {
if (isset($module->optionsHtml) && count($module->optionsHtml) > 0) {
$module->optionsHtml[0] = str_replace('btn btn-success', 'btn btn-primary-reverse btn-outline-primary light-button', $module->optionsHtml[0]);
}
}
}
$data['controller_name'] = $controller;
$data['admin_module_ajax_url_psmbo'] = $this->getControllerLink('AdminPsMboModule');
$data['from'] = 'footer';
$data['modules_list'] = $modules;
$this->context->smarty->assign($data);
if ((int) Tools::getValue('legacy') == 1) {
return $this->context->smarty->fetch($this->template_dir . '/include/admin-end-content-footer-legacy.tpl');
}
return $this->context->smarty->fetch($this->template_dir . '/include/admin-end-content-footer.tpl');
}
public function fetchModulesByController($ajax = false)
{
$controller = Tools::getValue('controllerName');
// if controller is false, we try to get the other method
if ($controller === false) {
$controller = Tools::getValue('controller');
}
$controllerWhiteList = [
'AdminCarriers',
'AdminPayment'
];
if (empty($controller) || ($ajax === false && !in_array($controller, $controllerWhiteList))) {
return false;
}
$panel_id = '';
$modules = [];
switch ($controller) {
case 'AdminCarriers':
$modules = $this->getCarriersMboModules();
$panel_id = 'recommended-carriers-panel';
$this->context->smarty->assign(
'panel_title',
$this->trans('Use one of our recommended carrier modules', [], 'Admin.Shipping.Feature')
);
break;
case 'AdminPayment':
$modules = $this->getPaymentMboModules();
break;
default:
$filter_modules_list = $this->getFilterList($controller);
$tracking_source = 'back-office, ' . $controller;
$modules = $this->getModules($filter_modules_list, $tracking_source);
break;
}
if (empty($modules)) {
return false;
}
$data = array(
'panel_id' => $panel_id,
'controller_name' => $controller,
'admin_module_ajax_url_psmbo' => $this->getControllerLink('AdminPsMboModule'),
'from' => 'footer',
'modules_list' => $modules,
);
$this->context->smarty->assign($data);
if ($ajax === true) {
return $data;
}
return $this->context->smarty->fetch($this->template_dir . '/include/admin-end-content-footer.tpl');
}
/**
* @param string $tab The controller we want a link for.
*
* @return string Admin link with token
*/
public function getControllerLink($tab)
{
if (null === $this->front_controller) {
$this->front_controller = array();
foreach ($this->controller_name as $name) {
$this->front_controller[$name] = 'index.php?controller=' . $name . '&token=' . Tools::getAdminTokenLite($name);
}
}
if (isset($this->front_controller[$tab])) {
return $this->front_controller[$tab];
}
throw new Exception('Unknown controller requested.');
}
protected function handleAddonsConnectWithMbo()
{
if (Tools::getValue('controller') !== 'AdminPsMboModule') {
return false;
}
$addonsConnect = $this->getAddonsConnectToolbar();
$this->context->smarty->assign(array(
'addons_connect' => $addonsConnect,
));
return $this->context->smarty->fetch($this->template_dir . '/include/modal_addons_connect.tpl');
}
protected function handleTheme()
{
if (Tools::getValue('controller') !== 'AdminThemes') {
return false;
}
$this->context->smarty->assign([
'admin_module_ajax_url_psmbo' => $this->getControllerLink('AdminPsMboModule')
]);
return $this->context->smarty->fetch($this->template_dir . '/admin-end-content-theme.tpl');
}
public function hookDisplayAdminEndContent()
{
$connectWithMbo = $this->handleAddonsConnectWithMbo();
if ($connectWithMbo !== false) {
return $connectWithMbo;
}
$handleTheme = $this->handleTheme();
if ($handleTheme !== false) {
return $handleTheme;
}
$content = '';
$content .= $this->context->smarty->fetch($this->template_dir . '/modal.tpl');
$controller_page = (Tools::getIsset('controller')) ? Tools::getValue('controller') : '';
$controllerWhiteList = array('AdminCarriers', 'AdminPayment');
if (in_array($controller_page, $controllerWhiteList)) {
$this->context->smarty->assign(array(
'admin_module_ajax_url_psmbo' => $this->getControllerLink('AdminPsMboModule'),
'controller_page' => $controller_page
));
if (ADMIN_LEGACY_CONTEXT === true) {
$content .= $this->context->smarty->fetch($this->template_dir . '/admin-end-content-legacy.tpl');
} else {
$content .= $this->context->smarty->fetch($this->template_dir . '/admin-end-content.tpl');
}
}
return $content;
}
public function hookDisplayDashboardToolbarTopMenu()
{
if (Tools::getValue('controller') === 'AdminPsMboModule') {
$addonsConnect = $this->getAddonsConnectToolbar();
$this->context->smarty->assign(array(
'addons_connect' => $addonsConnect,
));
return $this->context->smarty->fetch($this->template_dir . '/module-toolbar.tpl');
}
$data = array();
$data['controller'] = Tools::getValue('controller');
$data['admin_module_ajax_url_psmbo'] = $this->context->link->getAdminLink('AdminPsMboModule');
$data['isSymfonyContext'] = $this->isSymfonyContext();
$this->context->smarty->assign($data);
return $this->context->smarty->fetch($this->template_dir . '/toolbar.tpl');
}
private function getAddonsConnectToolbar()
{
$container = SymfonyContainer::getInstance();
$addonsProvider = $container->get('prestashop.core.admin.data_provider.addons_interface');
$addonsConnect = [];
$authenticated = $addonsProvider->isAddonsAuthenticated();
if ($addonsProvider->isAddonsAuthenticated()) {
$addonsEmail = $addonsProvider->getAddonsEmail();
return array(
'connected' => true,
'email' => $addonsEmail['username_addons'],
'logout_url' => $container->get('router')->generate(
'admin_addons_logout',
[],
UrlGeneratorInterface::ABSOLUTE_URL
)
);
}
return array(
'connected' => false,
'login_url' => $container->get('router')->generate(
'admin_addons_login',
[],
UrlGeneratorInterface::ABSOLUTE_URL
)
);
}
/**
* uninstall()
*
* @param none
* @return bool
*/
public function uninstall()
{
// unregister hook
if (!parent::uninstall()) {
$this->_errors[] = $this->l('There was an error during the desinstallation.');
return false;
}
$idTab = Tab::getIdFromClassName('AdminModulesCatalog');
if ($idTab !== false) {
$catalogTab = new Tab($idTab);
$catalogTab->active = true;
$catalogTab->save();
}
$idTab = Tab::getIdFromClassName('AdminThemesCatalog');
if ($idTab !== false) {
$catalogTab = new Tab($idTab);
$catalogTab->active = true;
$catalogTab->save();
}
$idTab = Tab::getIdFromClassName('AdminPsMboTheme');
if ($idTab !== false) {
$catalogTab = new Tab($idTab);
$catalogTab->delete();
}
$idTab = Tab::getIdFromClassName('AdminPsMboModule');
if ($idTab !== false) {
$catalogTab = new Tab($idTab);
$catalogTab->delete();
}
return true;
}
/**
* set JS and CSS media
*
* @param none
* @return none
*/
public function setMedia($aJsDef, $aJs, $aCss)
{
Media::addJsDef($aJsDef);
$this->context->controller->addCSS($aCss);
$this->context->controller->addJS($aJs);
}
public function getCarriersMboModules()
{
$filter_modules_list = $this->getFilterList('AdminCarriers');
$tracking_source = 'back-office,AdminCarriers,new';
return $this->getModules($filter_modules_list, $tracking_source);
}
public function getFilterList($className)
{
$idTab = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT t.id_tab
FROM ' . _DB_PREFIX_ . 'tab t
WHERE t.class_name LIKE "' . pSQL($className) . '"');
$tab_modules_list = Tab::getTabModulesList($idTab);
$filter_modules_list = [];
if (is_array($tab_modules_list['default_list']) && count($tab_modules_list['default_list'])) {
$filter_modules_list = $tab_modules_list['default_list'];
} elseif (is_array($tab_modules_list['slider_list']) && count($tab_modules_list['slider_list'])) {
$filter_modules_list = $tab_modules_list['slider_list'];
}
return $filter_modules_list;
}
public function getModules($filter_modules_list, $tracking_source)
{
$all_modules = Module::getModulesOnDisk(true);
$modules_list = [];
foreach ($all_modules as $module) {
$perm = true;
if ($module->id) {
$perm &= Module::getPermissionStatic($module->id, 'configure');
} else {
$id_admin_module = Tab::getIdFromClassName('AdminModules');
$access = Profile::getProfileAccess($this->context->employee->id_profile, $id_admin_module);
if (!$access['edit']) {
$perm &= false;
}
}
if (in_array($module->name, $filter_modules_list) && $perm) {
$this->fillModuleData($module, 'array', null, 'back-office,AdminCarriers,new');
$modules_list[array_search($module->name, $filter_modules_list)] = $module;
}
}
ksort($modules_list);
return $modules_list;
}
protected function getPaymentMboModules()
{
// fillModuleData back-office,AdminPayment,index
$filter_modules_list = $this->getFilterList('AdminPayment');
$tracking_source = 'back-office,AdminPayment,index';
$modulesList = $this->getModules($filter_modules_list, $tracking_source);
$modules = [];
foreach ($modulesList as $key => $module) {
if (isset($module->description_full) && trim($module->description_full) != '') {
$module->show_quick_view = true;
}
// Remove all options but 'configure' and install
// All other operation should take place in new Module page
if (($module->installed && $module->active) || !$module->installed) {
// Unfortunately installed but disabled module will have $module->installed = false
if (strstr($module->optionsHtml[0], 'enable=1')) {
$module->optionsHtml = [];
} else {
$module->optionsHtml = array($module->optionsHtml[0]);
}
} else {
$module->optionsHtml = [];
}
if (!$module->active) {
$modules[] = $module;
}
}
return $modules;
}
public function fillModuleData(&$module, $output_type = 'link', $back = null, $install_source_tracking = false)
{
/** @var Module $obj */
$obj = null;
if ($module->onclick_option) {
$obj = new $module->name();
}
// Fill module data
$module->logo = '../../img/questionmark.png';
if (@filemtime(_PS_ROOT_DIR_.DIRECTORY_SEPARATOR.basename(_PS_MODULE_DIR_).DIRECTORY_SEPARATOR.$module->name
.DIRECTORY_SEPARATOR.'logo.gif')) {
$module->logo = 'logo.gif';
}
if (@filemtime(_PS_ROOT_DIR_.DIRECTORY_SEPARATOR.basename(_PS_MODULE_DIR_).DIRECTORY_SEPARATOR.$module->name
.DIRECTORY_SEPARATOR.'logo.png')) {
$module->logo = 'logo.png';
}
$link_admin_modules = $this->context->link->getAdminLink('AdminModules', true);
$module->options['install_url'] = $this->context->link->getAdminLink('AdminModules') . '&install=' . $module->name . '&module_name=' . $module->name . '&tab_module=' . $module->tab;
$module->options['update_url'] = $this->context->link->getAdminLink('AdminModules') . '&checkAndUpdate=1&module_name=' . $module->name;
$module->options['uninstall_url'] = $this->context->link->getAdminLink('AdminModules') . '&module_name=' . $module->name . '&uninstall=' . $module->name . '&tab_module=' . $module->tab;
// free modules get their source tracking data here
$module->optionsHtml = $this->displayModuleOptions($module, $output_type, $back, $install_source_tracking);
// pay modules get their source tracking data here
if ($install_source_tracking && isset($module->addons_buy_url)) {
$module->addons_buy_url .= ($install_source_tracking ? '&utm_term='.$install_source_tracking : '');
}
$module->options['uninstall_onclick'] = ((!$module->onclick_option) ?
((empty($module->confirmUninstall)) ? 'return confirm(\''.$this->l('Do you really want to uninstall this module?').'\');' : 'return confirm(\''.addslashes($module->confirmUninstall).'\');') :
$obj->onclickOption('uninstall', $module->options['uninstall_url']));
if ((Tools::getValue('module_name') == $module->name || in_array($module->name, explode('|', Tools::getValue('modules_list')))) && (int)Tools::getValue('conf') > 0) {
$module->message = $this->_conf[(int)Tools::getValue('conf')];
}
if ((Tools::getValue('module_name') == $module->name || in_array($module->name, explode('|', Tools::getValue('modules_list')))) && (int)Tools::getValue('conf') > 0) {
unset($obj);
}
}
/**
* Display modules list
*
* @param Module $module
* @param string $output_type (link or select)
* @param string|null $back
* @param string|bool $install_source_tracking
* @return string|array
*/
public function displayModuleOptions($module, $output_type = 'link', $back = null, $install_source_tracking = false)
{
if (!isset($module->enable_device)) {
$module->enable_device = Context::DEVICE_COMPUTER | Context::DEVICE_TABLET | Context::DEVICE_MOBILE;
}
$this->translationsTab['confirm_uninstall_popup'] = (isset($module->confirmUninstall) ? $module->confirmUninstall : $this->l('Do you really want to uninstall this module?'));
if (!isset($this->translationsTab['Disable this module'])) {
$this->translationsTab['Disable this module'] = $this->l('Disable this module');
$this->translationsTab['Enable this module for all shops'] = $this->l('Enable this module for all shops');
$this->translationsTab['Disable'] = $this->l('Disable');
$this->translationsTab['Enable'] = $this->l('Enable');
$this->translationsTab['Disable on mobiles'] = $this->l('Disable on mobiles');
$this->translationsTab['Disable on tablets'] = $this->l('Disable on tablets');
$this->translationsTab['Disable on computers'] = $this->l('Disable on computers');
$this->translationsTab['Display on mobiles'] = $this->l('Display on mobiles');
$this->translationsTab['Display on tablets'] = $this->l('Display on tablets');
$this->translationsTab['Display on computers'] = $this->l('Display on computers');
$this->translationsTab['Reset'] = $this->l('Reset');
$this->translationsTab['Configure'] = $this->l('Configure');
$this->translationsTab['Delete'] = $this->l('Delete');
$this->translationsTab['Install'] = $this->l('Install');
$this->translationsTab['Uninstall'] = $this->l('Uninstall');
$this->translationsTab['Would you like to delete the content related to this module ?'] = $this->l('Would you like to delete the content related to this module ?');
$this->translationsTab['This action will permanently remove the module from the server. Are you sure you want to do this?'] = $this->l('This action will permanently remove the module from the server. Are you sure you want to do this?');
$this->translationsTab['Remove from Favorites'] = $this->l('Remove from Favorites');
$this->translationsTab['Mark as Favorite'] = $this->l('Mark as Favorite');
}
$link_admin_modules = $this->context->link->getAdminLink('AdminModules', true);
$modules_options = [];
$configure_module = array(
'href' => $link_admin_modules.'&configure='.urlencode($module->name).'&tab_module='.$module->tab.'&module_name='.urlencode($module->name),
'onclick' => $module->onclick_option && isset($module->onclick_option_content['configure']) ? $module->onclick_option_content['configure'] : '',
'title' => '',
'text' => $this->translationsTab['Configure'],
'cond' => $module->id && isset($module->is_configurable) && $module->is_configurable,
'icon' => 'wrench',
);
$desactive_module = array(
'href' => $link_admin_modules.'&module_name='.urlencode($module->name).'&'.($module->active ? 'enable=0' : 'enable=1').'&tab_module='.$module->tab,
'onclick' => $module->active && $module->onclick_option && isset($module->onclick_option_content['desactive']) ? $module->onclick_option_content['desactive'] : '' ,
'title' => Shop::isFeatureActive() ? htmlspecialchars($module->active ? $this->translationsTab['Disable this module'] : $this->translationsTab['Enable this module for all shops']) : '',
'text' => $module->active ? $this->translationsTab['Disable'] : $this->translationsTab['Enable'],
'cond' => $module->id,
'icon' => 'off',
);
$link_reset_module = $link_admin_modules.'&module_name='.urlencode($module->name).'&reset&tab_module='.$module->tab;
$is_reset_ready = false;
if (Validate::isModuleName($module->name)) {
if (method_exists(Module::getInstanceByName($module->name), 'reset')) {
$is_reset_ready = true;
}
}
$reset_module = array(
'href' => $link_reset_module,
'onclick' => $module->onclick_option && isset($module->onclick_option_content['reset']) ? $module->onclick_option_content['reset'] : '',
'title' => '',
'text' => $this->translationsTab['Reset'],
'cond' => $module->id && $module->active,
'icon' => 'undo',
'class' => ($is_reset_ready ? 'reset_ready' : '')
);
$delete_module = array(
'href' => $link_admin_modules.'&delete='.urlencode($module->name).'&tab_module='.$module->tab.'&module_name='.urlencode($module->name),
'onclick' => $module->onclick_option && isset($module->onclick_option_content['delete']) ? $module->onclick_option_content['delete'] : 'return confirm(\''.$this->translationsTab['This action will permanently remove the module from the server. Are you sure you want to do this?'].'\');',
'title' => '',
'text' => $this->translationsTab['Delete'],
'cond' => true,
'icon' => 'trash',
'class' => 'text-danger'
);
$display_mobile = array(
'href' => $link_admin_modules.'&module_name='.urlencode($module->name).'&'.($module->enable_device & Context::DEVICE_MOBILE ? 'disable_device' : 'enable_device').'='.Context::DEVICE_MOBILE.'&tab_module='.$module->tab,
'onclick' => '',
'title' => htmlspecialchars($module->enable_device & Context::DEVICE_MOBILE ? $this->translationsTab['Disable on mobiles'] : $this->translationsTab['Display on mobiles']),
'text' => $module->enable_device & Context::DEVICE_MOBILE ? $this->translationsTab['Disable on mobiles'] : $this->translationsTab['Display on mobiles'],
'cond' => $module->id,
'icon' => 'mobile'
);
$display_tablet = array(
'href' => $link_admin_modules.'&module_name='.urlencode($module->name).'&'.($module->enable_device & Context::DEVICE_TABLET ? 'disable_device' : 'enable_device').'='.Context::DEVICE_TABLET.'&tab_module='.$module->tab,
'onclick' => '',
'title' => htmlspecialchars($module->enable_device & Context::DEVICE_TABLET ? $this->translationsTab['Disable on tablets'] : $this->translationsTab['Display on tablets']),
'text' => $module->enable_device & Context::DEVICE_TABLET ? $this->translationsTab['Disable on tablets'] : $this->translationsTab['Display on tablets'],
'cond' => $module->id,
'icon' => 'tablet'
);
$display_computer = array(
'href' => $link_admin_modules.'&module_name='.urlencode($module->name).'&'.($module->enable_device & Context::DEVICE_COMPUTER ? 'disable_device' : 'enable_device').'='.Context::DEVICE_COMPUTER.'&tab_module='.$module->tab,
'onclick' => '',
'title' => htmlspecialchars($module->enable_device & Context::DEVICE_COMPUTER ? $this->translationsTab['Disable on computers'] : $this->translationsTab['Display on computers']),
'text' => $module->enable_device & Context::DEVICE_COMPUTER ? $this->translationsTab['Disable on computers'] : $this->translationsTab['Display on computers'],
'cond' => $module->id,
'icon' => 'desktop'
);
$install = array(
'href' => $link_admin_modules.'&install='.urlencode($module->name).'&tab_module='.$module->tab.'&module_name='.$module->name.'&anchor='.ucfirst($module->name)
.(!is_null($back) ? '&back='.urlencode($back) : '').($install_source_tracking ? '&source='.$install_source_tracking : ''),
'onclick' => '',
'title' => $this->translationsTab['Install'],
'text' => $this->translationsTab['Install'],
'cond' => $module->id,
'icon' => 'plus-sign-alt'
);
$uninstall = array(
'href' => $link_admin_modules.'&uninstall='.urlencode($module->name).'&tab_module='.$module->tab.'&module_name='.$module->name.'&anchor='.ucfirst($module->name).(!is_null($back) ? '&back='.urlencode($back) : ''),
'onclick' => (isset($module->onclick_option_content['uninstall']) ? $module->onclick_option_content['uninstall'] : 'return confirm(\''.$this->translationsTab['confirm_uninstall_popup'].'\');'),
'title' => $this->translationsTab['Uninstall'],
'text' => $this->translationsTab['Uninstall'],
'cond' => $module->id,
'icon' => 'minus-sign-alt'
);
$remove_from_favorite = array(
'href' => '#',
'class' => 'action_unfavorite toggle_favorite',
'onclick' =>'',
'title' => $this->translationsTab['Remove from Favorites'],
'text' => $this->translationsTab['Remove from Favorites'],
'cond' => $module->id,
'icon' => 'star',
'data-value' => '0',
'data-module' => $module->name
);
$mark_as_favorite = array(
'href' => '#',
'class' => 'action_favorite toggle_favorite',
'onclick' => '',
'title' => $this->translationsTab['Mark as Favorite'],
'text' => $this->translationsTab['Mark as Favorite'],
'cond' => $module->id,
'icon' => 'star',
'data-value' => '1',
'data-module' => $module->name
);
$update = array(
'href' => $module->options['update_url'],
'onclick' => '',
'title' => 'Update it!',
'text' => 'Update it!',
'icon' => 'refresh',
'cond' => $module->id,
);
$divider = array(
'href' => '#',
'onclick' => '',
'title' => 'divider',
'text' => 'divider',
'cond' => $module->id,
);
if (isset($module->version_addons) && $module->version_addons) {
$modules_options[] = $update;
}
if ($module->active) {
$modules_options[] = $configure_module;
$modules_options[] = $desactive_module;
$modules_options[] = $display_mobile;
$modules_options[] = $display_tablet;
$modules_options[] = $display_computer;
} else {
$modules_options[] = $desactive_module;
$modules_options[] = $configure_module;
}
$modules_options[] = $reset_module;
if ($output_type == 'select') {
if (!$module->id) {
$modules_options[] = $install;
} else {
$modules_options[] = $uninstall;
}
} elseif ($output_type == 'array') {
if ($module->id) {
$modules_options[] = $uninstall;
}
}
if (isset($module->preferences) && isset($module->preferences['favorite']) && $module->preferences['favorite'] == 1) {
$remove_from_favorite['style'] = '';
$mark_as_favorite['style'] = 'display:none;';
$modules_options[] = $remove_from_favorite;
$modules_options[] = $mark_as_favorite;
} else {
$mark_as_favorite['style'] = '';
$remove_from_favorite['style'] = 'display:none;';
$modules_options[] = $remove_from_favorite;
$modules_options[] = $mark_as_favorite;
}
if ($module->id == 0) {
$install['cond'] = 1;
$install['flag_install'] = 1;
$modules_options[] = $install;
}
$modules_options[] = $divider;
$modules_options[] = $delete_module;
$return = '';
foreach ($modules_options as $option_name => $option) {
if ($option['cond']) {
if ($output_type == 'link') {
$return .= '<li><a class="'.$option_name.' action_module';
$return .= '" href="'.$option['href'].(!is_null($back) ? '&back='.urlencode($back) : '').'"';
$return .= ' onclick="'.$option['onclick'].'" title="'.$option['title'].'"><i class="icon-'.(isset($option['icon']) && $option['icon'] ? $option['icon']:'cog').'"></i>&nbsp;'.$option['text'].'</a></li>';
} elseif ($output_type == 'array') {
if (!is_array($return)) {
$return = [];
}
$html = '<a class="';
$is_install = isset($option['flag_install']) ? true : false;
if (isset($option['class'])) {
$html .= $option['class'];
}
if ($is_install) {
$html .= ' btn btn-success';
}
if (!$is_install && count($return) == 0) {
$html .= ' btn btn-default';
}
$html .= '"';
if (isset($option['data-value'])) {
$html .= ' data-value="'.$option['data-value'].'"';
}
if (isset($option['data-module'])) {
$html .= ' data-module="'.$option['data-module'].'"';
}
if (isset($option['style'])) {
$html .= ' style="'.$option['style'].'"';
}
$html .= ' href="'.htmlentities($option['href']).(!is_null($back) ? '&back='.urlencode($back) : '').'" onclick="'.$option['onclick'].'" title="'.$option['title'].'"><i class="icon-'.(isset($option['icon']) && $option['icon'] ? $option['icon']:'cog').'"></i> '.$option['text'].'</a>';
$return[] = $html;
} elseif ($output_type == 'select') {
$return .= '<option id="'.$option_name.'" data-href="'.htmlentities($option['href']).(!is_null($back) ? '&back='.urlencode($back) : '').'" data-onclick="'.$option['onclick'].'">'.$option['text'].'</option>';
}
}
}
if ($output_type == 'select') {
$return = '<select id="select_'.$module->name.'">'.$return.'</select>';
}
return $return;
}
}