first commit
This commit is contained in:
301
modules/leobootstrapmenu/classes/widget.php
Normal file
301
modules/leobootstrapmenu/classes/widget.php
Normal file
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
/**
|
||||
* 2007-2015 Leotheme
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* Leo Bootstrap Menu
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* @author leotheme <leotheme@gmail.com>
|
||||
* @copyright 2007-2015 Leotheme
|
||||
* @license http://leotheme.com - prestashop template provider
|
||||
*/
|
||||
|
||||
if (!defined('_PS_VERSION_')) {
|
||||
# module validation
|
||||
exit;
|
||||
}
|
||||
if (!class_exists('LeoWidget')) {
|
||||
|
||||
/**
|
||||
* LeoFooterBuilderWidget Model Class
|
||||
*/
|
||||
class LeoWidget extends ObjectModel
|
||||
{
|
||||
public $name;
|
||||
public $type;
|
||||
public $params;
|
||||
public $key_widget;
|
||||
public $id_shop;
|
||||
private $widgets = array();
|
||||
public $modName = 'leobootstrapmenu';
|
||||
public $theme = '';
|
||||
public $langID = 1;
|
||||
public $engines = array();
|
||||
public $engineTypes = array();
|
||||
|
||||
public function setTheme($theme)
|
||||
{
|
||||
$this->theme = $theme;
|
||||
return $this;
|
||||
}
|
||||
public static $definition = array(
|
||||
'table' => 'btmegamenu_widgets',
|
||||
'primary' => 'id_btmegamenu_widgets',
|
||||
'fields' => array(
|
||||
'name' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'size' => 255, 'required' => true),
|
||||
'type' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'size' => 255),
|
||||
'params' => array('type' => self::TYPE_HTML, 'validate' => 'isString'),
|
||||
'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isunsignedInt', 'required' => true),
|
||||
'key_widget' => array('type' => self::TYPE_INT, 'validate' => 'isunsignedInt', 'size' => 11)
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Get translation for a given module text
|
||||
*
|
||||
* Note: $specific parameter is mandatory for library files.
|
||||
* Otherwise, translation key will not match for Module library
|
||||
* when module is loaded with eval() Module::getModulesOnDisk()
|
||||
*
|
||||
* @param string $string String to translate
|
||||
* @param boolean|string $specific filename to use in translation key
|
||||
* @return string Translation
|
||||
*/
|
||||
public function l($string, $specific = false)
|
||||
{
|
||||
return Translate::getModuleTranslation($this->modName, $string, ($specific) ? $specific : $this->modName);
|
||||
}
|
||||
|
||||
public function update($null_values = false)
|
||||
{
|
||||
// validate module
|
||||
unset($null_values);
|
||||
return Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'btmegamenu_widgets SET `name`= "'.pSQL($this->name).'", `type`= "'.pSQL($this->type).'", `params`= "'.pSQL($this->params).'", `id_shop` = '.(int)$this->id_shop.', `key_widget` = '.(int)$this->key_widget.' WHERE `id_btmegamenu_widgets` = '.(int)$this->id.' AND `id_shop` = '.(int)Context::getContext()->shop->id);
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$this->clearCaches();
|
||||
return parent::delete();
|
||||
}
|
||||
|
||||
public function loadEngines()
|
||||
{
|
||||
if (!$this->engines) {
|
||||
$wds = glob(dirname(__FILE__).'/widget/*.php');
|
||||
foreach ($wds as $w) {
|
||||
if (basename($w) == 'index.php') {
|
||||
continue;
|
||||
}
|
||||
require_once($w);
|
||||
$f = str_replace('.php', '', basename($w));
|
||||
//DOGNND:: validate module
|
||||
$validate_class = str_replace('_', '', $f);
|
||||
$class = 'LeoWidget'.Tools::ucfirst($validate_class);
|
||||
|
||||
if (class_exists($class)) {
|
||||
$this->engines[$f] = new $class;
|
||||
$this->engines[$f]->id_shop = Context::getContext()->shop->id;
|
||||
$this->engines[$f]->langID = Context::getContext()->language->id;
|
||||
$this->engineTypes[$f] = $this->engines[$f]->getWidgetInfo();
|
||||
$this->engineTypes[$f]['type'] = $f;
|
||||
$this->engineTypes[$f]['for'] = $this->engines[$f]->for_module;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get list of supported widget types.
|
||||
*/
|
||||
public function getTypes()
|
||||
{
|
||||
return $this->engineTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* get list of widget rows.
|
||||
*/
|
||||
public function getWidgets()
|
||||
{
|
||||
$context = Context::getContext();
|
||||
$id_shop = $context->shop->id;
|
||||
$id_lang = $context->language->id;
|
||||
$cacheId = 'leobootstrapmenu_classes_widget.php_____getWidgets()_' . md5($id_shop.$id_lang);
|
||||
if (!Cache::isStored($cacheId)) {
|
||||
$sql = ' SELECT * FROM '._DB_PREFIX_.'btmegamenu_widgets WHERE `id_shop` = '.(int)Context::getContext()->shop->id;
|
||||
$result = Db::getInstance()->executes($sql);
|
||||
Cache::store($cacheId, $result);
|
||||
} else {
|
||||
$result = Cache::retrieve($cacheId);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* get widget data row by id
|
||||
*/
|
||||
public function getWidetById($id, $id_shop)
|
||||
{
|
||||
$output = array(
|
||||
'id' => '',
|
||||
'id_btmegamenu_widgets' => '',
|
||||
'name' => '',
|
||||
'params' => '',
|
||||
'type' => '',
|
||||
);
|
||||
if (!$id) {
|
||||
# validate module
|
||||
return $output;
|
||||
}
|
||||
$sql = ' SELECT * FROM '._DB_PREFIX_.'btmegamenu_widgets WHERE id_btmegamenu_widgets='.(int)$id.' AND id_shop='.(int)$id_shop;
|
||||
|
||||
$row = Db::getInstance()->getRow($sql);
|
||||
|
||||
if ($row) {
|
||||
$output = array_merge($output, $row);
|
||||
$output['params'] = Tools::jsonDecode(call_user_func('base64'.'_decode', $output['params']), true);
|
||||
$output['id'] = $output['id_btmegamenu_widgets'];
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* get widget data row by id
|
||||
*/
|
||||
public function getWidetByKey($key, $id_shop)
|
||||
{
|
||||
$output = array(
|
||||
'id' => '',
|
||||
'id_btmegamenu_widgets' => '',
|
||||
'name' => '',
|
||||
'params' => '',
|
||||
'type' => '',
|
||||
'key_widget' => '',
|
||||
);
|
||||
if (!$key) {
|
||||
# validate module
|
||||
return $output;
|
||||
}
|
||||
$sql = ' SELECT * FROM '._DB_PREFIX_.'btmegamenu_widgets WHERE key_widget='.(int)$key.' AND id_shop='.(int)$id_shop;
|
||||
$row = Db::getInstance()->getRow($sql);
|
||||
if ($row) {
|
||||
$output = array_merge($output, $row);
|
||||
$output['params'] = Tools::jsonDecode(call_user_func('base64'.'_decode', $output['params']), true);
|
||||
$output['id'] = $output['id_btmegamenu_widgets'];
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* render widget Links Form.
|
||||
*/
|
||||
public function getWidgetInformationForm($args, $data)
|
||||
{
|
||||
$fields = array(
|
||||
'html' => array('type' => 'textarea', 'value' => '', 'lang' => 1, 'values' => array(), 'attrs' => 'cols="40" rows="6"')
|
||||
);
|
||||
unset($args);
|
||||
return $this->_renderFormByFields($fields, $data);
|
||||
}
|
||||
|
||||
public function renderWidgetSubcategoriesContent($args, $setting)
|
||||
{
|
||||
# validate module
|
||||
unset($args);
|
||||
$t = array(
|
||||
'category_id' => '',
|
||||
'limit' => '12'
|
||||
);
|
||||
$setting = array_merge($t, $setting);
|
||||
|
||||
$category = new Category($setting['category_id'], $this->langID);
|
||||
$subCategories = $category->getSubCategories($this->langID);
|
||||
$setting['title'] = $category->name;
|
||||
|
||||
|
||||
$setting['subcategories'] = $subCategories;
|
||||
$output = array('type' => 'sub_categories', 'data' => $setting);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* general function to render FORM
|
||||
*
|
||||
* @param String $type is form type.
|
||||
* @param Array default data values for inputs.
|
||||
*
|
||||
* @return Text.
|
||||
*/
|
||||
public function getForm($type, $data = array())
|
||||
{
|
||||
if (isset($this->engines[$type])) {
|
||||
$args = array();
|
||||
$this->engines[$type]->types = $this->getTypes();
|
||||
|
||||
return $this->engines[$type]->renderForm($args, $data);
|
||||
}
|
||||
return $this->l('Sorry, Form Setting is not avairiable for this type');
|
||||
}
|
||||
|
||||
public function getWidgetContent($type, $data)
|
||||
{
|
||||
$args = array();
|
||||
$data = Tools::jsonDecode(call_user_func('base64'.'_decode', $data), true);
|
||||
|
||||
$data['widget_heading'] = isset($data['widget_title_'.$this->langID]) ? Tools::stripslashes($data['widget_title_'.$this->langID]) : '';
|
||||
|
||||
if (isset($this->engines[$type])) {
|
||||
$args = array();
|
||||
return $this->engines[$type]->renderContent($args, $data);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function renderContent($id)
|
||||
{
|
||||
$output = array('id' => $id, 'type' => '', 'data' => '');
|
||||
if (isset($this->widgets[$id])) {
|
||||
# validate module
|
||||
$output = $this->getWidgetContent($this->widgets[$id]['type'], $this->widgets[$id]['params']);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
public function loadWidgets()
|
||||
{
|
||||
if (empty($this->widgets)) {
|
||||
$widgets = $this->getWidgets();
|
||||
foreach ($widgets as $widget) {
|
||||
$widget['id'] = $widget['id_btmegamenu_widgets'];
|
||||
$this->widgets[$widget['key_widget']] = $widget;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function clearCaches()
|
||||
{
|
||||
if (file_exists(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php')) {
|
||||
require_once(_PS_MODULE_DIR_.'leobootstrapmenu/leobootstrapmenu.php');
|
||||
$leobootstrapmenu = new leobootstrapmenu();
|
||||
$leobootstrapmenu->clearCache();
|
||||
}
|
||||
if (file_exists(_PS_MODULE_DIR_.'leomenusidebar/leomenusidebar.php')) {
|
||||
require_once(_PS_MODULE_DIR_.'leomenusidebar/leomenusidebar.php');
|
||||
$leomenusidebar = new leomenusidebar();
|
||||
$leomenusidebar->clearCache();
|
||||
}
|
||||
if (file_exists(_PS_MODULE_DIR_.'leomanagewidgets/leomanagewidgets.php')) {
|
||||
require_once(_PS_MODULE_DIR_.'leomanagewidgets/leomanagewidgets.php');
|
||||
$leomanagewidgets = new LeoManagewidgets();
|
||||
$leomanagewidgets->clearHookCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user