Files
bio-concept-labo/web/modules/ps_faviconnotificationbo/ps_faviconnotificationbo.php
2019-11-20 07:44:43 +01:00

285 lines
9.1 KiB
PHP

<?php
/**
* 2007-2018 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 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/afl-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/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_')) {
exit;
}
class Ps_faviconnotificationbo extends Module
{
protected static $conf_fields = array(
'BACKGROUND_COLOR_FAVICONBO',
'TEXT_COLOR_FAVICONBO',
'CHECKBOX_ORDER',
'CHECKBOX_CUSTOMER',
'CHECKBOX_MESSAGE'
);
public function __construct()
{
$this->name = 'ps_faviconnotificationbo';
$this->tab = 'administration';
$this->version = '1.0.0';
$this->author = 'PrestaShop';
$this->bootstrap = true;
$this->module_key = '91315ca88851b6c2852ee4be0c59b7b1';
$this->author_address = '0x64aa3c1e4034d07015f639b0e171b0d7b27d01aa';
$this->controllers = array(
'adminAjax' => 'AdminAjaxFaviconBO',
);
parent::__construct();
$this->displayName = $this->l('Order Notifications on the Favicon');
$this->description = $this->l('Get notified when you get new order, new client or new message directly on your browser tab of your back office even if you are working on another page');
// Settings paths
$this->js_path = $this->_path.'views/js/';
$this->css_path = $this->_path.'views/css/';
$this->img_path = $this->_path.'views/img/';
$this->docs_path = $this->_path.'docs/';
$this->logo_path = $this->_path.'logo.png';
$this->module_path = $this->_path;
$this->ps_version = (bool)version_compare(_PS_VERSION_, '1.7', '>=');
// Confirm uninstall
$this->confirmUninstall = $this->l('Are you sure you want to uninstall this module?');
$this->ps_versions_compliancy = array('min' => '1.5', 'max' => _PS_VERSION_);
}
/**
*
*
* @param none
* @return bool
*/
public function install()
{
Configuration::updateValue('CHECKBOX_ORDER', '1');
Configuration::updateValue('CHECKBOX_CUSTOMER', '1');
Configuration::updateValue('CHECKBOX_MESSAGE', '1');
Configuration::updateValue('BACKGROUND_COLOR_FAVICONBO', '#DF0067');
Configuration::updateValue('TEXT_COLOR_FAVICONBO', '#ffffff');
return (parent::install() && $this->registerHook('BackOfficeHeader') && $this->installTab());
}
public function uninstall()
{
foreach (Ps_faviconnotificationbo::$conf_fields as $field) {
Configuration::deleteByName($field);
}
if (parent::uninstall() &&
$this->uninstallTab()) {
return true;
} else {
$this->_errors[] = $this->l('There was an error during the uninstallation.');
return false;
}
}
/**
* This method is often use to create an ajax controller
*
* @param none
* @return bool
*/
public function installTab()
{
$tab = new Tab();
$tab->active = 1;
$tab->class_name = 'AdminAjaxFaviconBO';
$tab->name = array();
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = $this->name;
}
$tab->id_parent = -1;
$tab->module = $this->name;
return $tab->add();
}
/**
* uninstall tab
*
* @param none
* @return bool
*/
public function uninstallTab()
{
$id_tab = (int)Tab::getIdFromClassName('AdminAjaxFaviconBO');
if ($id_tab) {
$tab = new Tab($id_tab);
if (Validate::isLoadedObject($tab)) {
return ($tab->delete());
} else {
$return = false;
}
} else {
$return = true;
}
return $return;
}
/**
* load dependencies in the configuration of the module
*/
public function loadAsset()
{
// Load CSS
$css = array(
$this->css_path.'faq.css',
$this->css_path.'menu.css',
$this->css_path.'back.css',
$this->css_path.'fontawesome-all.min',
);
$this->context->controller->addCSS($css, 'all');
// Load JS
$jss = array(
$this->js_path.'vue.min.js',
$this->js_path.'faq.js',
$this->js_path.'menu.js',
);
$this->context->controller->addJqueryPlugin('colorpicker');
$this->context->controller->addJS($jss);
}
/**
* FAQ API
*/
public function loadFaq()
{
include_once('classes/APIFAQClass.php');
$api = new APIFAQ();
$faq = $api->getData($this->module_key, $this->version);
return $faq;
}
/**
* Load the configuration form
*/
public function getContent()
{
if ($this->ps_version) {
$params = array('configure' => $this->name);
$moduleAdminLink = Context::getContext()->link->getAdminLink('AdminModules', true, false, $params);
} else {
$moduleAdminLink = Context::getContext()->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&module_name='.$this->name;
}
$faq = $this->loadFaq(); // load faq from addons api
$this->loadAsset(); // load js and css
$id_lang = $this->context->language->id;
$iso_lang = Language::getIsoById($id_lang);
// get readme
switch ($iso_lang) {
case 'fr':
$doc = $this->docs_path.'readme_fr.pdf';
break;
default:
$doc = $this->docs_path.'readme_en.pdf';
break;
}
// get current page
$currentPage = 'faviconConfiguration';
$page = Tools::getValue('page');
if (!empty($page)) {
$currentPage = Tools::getValue('page');
}
// assign var to smarty
$this->context->smarty->assign(array(
'module_name' => $this->name,
'module_version' => $this->version,
'moduleAdminLink' => $moduleAdminLink,
'module_display' => $this->displayName,
'apifaq' => $faq,
'doc' => $doc,
'logo_path' => $this->logo_path,
'languages' => $this->context->controller->getLanguages(),
'defaultFormLanguage' => (int) $this->context->employee->id_lang,
'currentPage' => $currentPage,
'ps_base_dir' => Tools::getHttpHost(true),
'ps_version' => _PS_VERSION_,
'isPs17' => $this->ps_version,
));
return $this->context->smarty->fetch($this->local_path.'views/templates/admin/menu.tpl');
}
/**
* return parameters saved during the favicon configuration
* @return array parameters saved
*/
public function getParams()
{
$params = array('BACKGROUND_COLOR_FAVICONBO', 'TEXT_COLOR_FAVICONBO', 'CHECKBOX_ORDER', 'CHECKBOX_CUSTOMER', 'CHECKBOX_MESSAGE');
return Configuration::getMultiple($params);
}
/**
* load the javascript who is used in all the backoffice
*/
public function loadGlobalAsset()
{
$jss = array(
$this->js_path.'favico.js',
);
$this->context->controller->addJS($jss);
}
public function hookBackOfficeHeader($params)
{
if (!$this->active) {
return;
}
$this->loadGlobalAsset();
if (Tools::isSubmit('submitFavIconConf')) {
$this->saveForm();
}
$params = $this->getParams();
// controller url
$adminController = $this->context->link->getAdminLink('AdminAjaxFaviconBO');
$this->context->smarty->assign(array(
'bofavicon_params' => $params,
'adminController' => $adminController,
));
return $this->context->smarty->fetch($this->local_path.'views/templates/hook/faviconbo.tpl');
}
public function saveForm()
{
Configuration::updateValue('BACKGROUND_COLOR_FAVICONBO', Tools::getValue('BACKGROUND_COLOR_FAVICONBO'));
Configuration::updateValue('TEXT_COLOR_FAVICONBO', Tools::getValue('TEXT_COLOR_FAVICONBO'));
Configuration::updateValue('CHECKBOX_ORDER', Tools::getValue('CHECKBOX_ORDER'));
Configuration::updateValue('CHECKBOX_CUSTOMER', Tools::getValue('CHECKBOX_CUSTOMER'));
Configuration::updateValue('CHECKBOX_MESSAGE', Tools::getValue('CHECKBOX_MESSAGE'));
}
}