Current Path :
/
home
/
develito
/
www
/
modules
/
mod_ja_acm
/
Or
Select Your Path :
Upload File :
New :
File
Dir
/home/develito/www/modules/mod_ja_acm/helper.php
<?php /** * ------------------------------------------------------------------------ * JA ACM Module * ------------------------------------------------------------------------ * Copyright (C) 2004-2018 J.O.O.M Solutions Co., Ltd. All Rights Reserved. * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html * Author: J.O.O.M Solutions Co., Ltd * Websites: http://www.joomlart.com - http://www.joomlancers.com * ------------------------------------------------------------------------ */ defined('_JEXEC') or die; use Joomla\CMS\Uri\Uri; use Joomla\CMS\Factory; use Joomla\Registry\Registry; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Utility\Utility; use Joomla\CMS\Helper\ModuleHelper; /** * Helper for mod_menu * * @package Joomla.Site * @subpackage mod_menu * @since 1.5 */ class ModJAACMHelper { protected $data = null; protected $layout = ''; protected $type = ''; protected $template = ''; protected $group = ''; protected $keys = array(); /** * Get a list of the menu items. * * @param JRegistry &$params The module options. * * @return array * * @since 1.5 */ public function __construct($params) { $config = json_decode($this->decode($params->get('jatools-config')), true); $type = ''; if (isset($config[':type'])) { $type = $config[':type']; } else if (isset($config[':layout'])) { $type = $config[':layout']; } $tmp = explode(':', $type, 2); $this->type = count($tmp) > 1 ? $tmp[1] : $tmp[0]; $this->template = count($tmp) > 1 && $tmp[0] != '_' ? $tmp[0] : ''; $this->data = isset($config[$this->type]) ? $config[$this->type] : array(); // detect group key $this->keys = array_keys($this->data); // detect layout $this->layout = $this->get('jatools-layout-' . $this->type, 0, 'default'); // fix an issue can not select an image on img editor on Frontend $doc = Factory::getDocument(); $doc->addScriptOptions('media-picker-api', ['apiBaseUrl' => Uri::base() . 'index.php?option=com_media&format=json']); } public function decode($str) { return str_replace(array('((', '))'), array('<', '>'), $str); } public function get($name, $i = 0, $default = null) { $value = (array)$this->findParam($name); $val = $value[$i] ?? ''; if (!empty($val) && preg_match ('/^(.*)\|filter:(.*)$/', $val, $match) && method_exists($this, 'filter'.$match[2])) { $func = 'filter'.$match[2]; $val = $this->$func ($match[1]); } return $val; } public function getCell($name, $row = 0, $col = 0, $default = null) { $value = (array)$this->findParam($name); if (!isset($value['data']) || !isset($value['data'][$row]) || !isset($value['data'][$row][$col])) return $default; $val = $value['data'][$row][$col]; if (!empty($val) && preg_match ('/^(.*)\|filter:(.*)$/', $val, $match) && method_exists($this, 'filter'.$match[2])) { $func = 'filter'.$match[2]; $val = $this->$func ($match[1]); } return $val; } public function count($name, $column = false) { $value = (array)$this->findParam($name); if (isset($value['type'])) { return $column ? (int)$value['cols'] : (int)$value['rows']; } return count($value); } public function getRows($name) { $value = (array)$this->findParam($name); if ($value && isset($value['type'])) { return (int)$value['rows']; } return count($value); } public function getCols($name) { $value = (array)$this->findParam($name); if ($value && isset($value['type'])) { return (int)$value['cols']; } return 1; } public function findParam($name) { $tmp = explode ('.', $name, 2); $group = null; if (count($tmp) == 2) { $group = $tmp[0]; $name = $tmp[1]; } $pattern = '/\[' . preg_quote($name) . '\]/'; // try to find by group $field = null; if ($group) { $field = $this->findParam($group); } // check if found field $name in $group if ($field) { foreach ($field as $key => $value) { if ($key == $name || preg_match($pattern, $key)) return $value; } } // find base on $name foreach ($this->keys as $key) { if ($key == $name || preg_match($pattern, $key)) return $this->data[$key]; } return null; } public function find($filename, $get_url = false, $return_default = false) { $template = Factory::getApplication()->getTemplate(); // Build the template and base path for the layout $paths = array(); // for T3: local folder $paths[Uri::base(true) . '/templates/' . $template . '/local/acm/'] = JPATH_THEMES . '/' . $template . '/local/acm/'; // config template $paths[Uri::base(true) . '/templates/' . $this->template . '/acm/'] = JPATH_THEMES . '/' . $this->template . '/acm/'; // current template $paths[Uri::base(true) . '/templates/' . $template . '/acm/'] = JPATH_THEMES . '/' . $template . '/acm/'; // in module $paths[Uri::base(true) . '/modules/mod_ja_acm/acm/'] = JPATH_BASE . '/modules/mod_ja_acm/acm/'; foreach ($paths as $uri => $path) { if (is_file($path . $this->type . '/' . $filename)) return ($get_url ? $uri : $path) . $this->type . '/' . $filename; } return null; } public function getLayout() { $layout = $this->find('tmpl/' . $this->layout . '.php'); if (!$layout) $layout = $this->find('tmpl/style-1.php'); return $layout; } public function addAssets() { $doc = Factory::getDocument(); if(file_exists(JPATH_ROOT . '/templates/' . Factory::getApplication()->getTemplate() . '/css/acm.css')){ $doc->addStyleSheet(Uri::root(true) . '/templates/' . Factory::getApplication()->getTemplate() . '/css/acm.css'); } if ($css = $this->find('css/style.css', true)) { $doc->addStyleSheet($css); } if ($js = $this->find('js/script.js', true)) { if(version_compare(JVERSION, '4','lt')){ HTMLHelper::_('jquery.framework'); }else{ Factory::getDocument()->getWebAssetManager()->useScript('jquery'); } $doc->addScript($js); } } public function renderModule ($name, $attribs=array()) { if (!$name) return null; static $buffers = array(); if (isset($buffers[$name])) return $buffers[$name]; // init cache to prevent nested parse $buffers[$name] = ''; // prevent cache $attribs['params'] = '{"cache":0}'; $buffers[$name] = Factory::getDocument()->getBuffer('module', $name, $attribs); return $buffers[$name]; } public function renderModules ($position, $attribs = array()) { if (!$position) return null; static $buffers = array(); if (isset($buffers[$position])) return $buffers[$position]; // init cache to prevent nested parse $buffers[$position] = ''; foreach(ModuleHelper::getModules($position) as $mod){ $buffers[$position] .= $this->renderChromes($mod,$attribs); } return $buffers[$position]; } public function countModules ($condition) { if (!$condition) return 0; return Factory::getDocument()->countModules ($condition); } public function renderJDoc ($id, $buffer) { static $buffers = array(); if (isset($buffers[$id])) return $buffers[$id]; // init cache to prevent nested parse $buffers[$id] = ''; $doc = Factory::getDocument(); $matches = array(); if (!empty($buffer) && preg_match_all('#<jdoc:include\ type="([^"]+)" (.*)\/>#iU', $buffer, $matches)) { $tags = array(); // Step through the jdocs in reverse order. for ($i = count($matches[0]) - 1; $i >= 0; $i--) { $type = $matches[1][$i]; $attribs = empty($matches[2][$i]) ? array() : Utility::parseAttributes($matches[2][$i]); $name = isset($attribs['name']) ? $attribs['name'] : null; // Separate buffers to be executed first and last $tags[$matches[0][$i]] = array('type' => $type, 'name' => $name, 'attribs' => $attribs); } $replace = array(); $with = array(); foreach ($tags as $jdoc => $args) { $replace[] = $jdoc; $with[] = $doc->getBuffer($args['type'], $args['name'], $args['attribs']); } $buffer = str_replace($replace, $with, $buffer); } $buffers[$id] = $buffer; return $buffers[$id]; } public function toArray($ignore_null = false) { $array = array(); $keys = array_keys($this->data); foreach ($keys as $key) { $_key = !empty($key) && preg_match('/.*\[([^]]+)\](\[\])?$/', $key, $match) ? $match[1] : $key; $val = count($match)<3 ? trim(implode(',', (array)$this->data[$key])) : $this->data[$key]; if(empty($_key)) continue; if ($ignore_null && $val === '') continue; $array[$_key] = $val; } return $array; } public function escape ($str) { return $str; } public function renderChromes($module,$attribs = array()){ //check method chrome style $chromeMethod = ""; if(array_key_exists('style',$attribs)){ $chromeMethod = 'modChrome_' . $attribs['style']; } $attribs_raw = $attribs; $attribs_raw['style'] = 'raw'; $module->content = ModuleHelper::renderModule($module,$attribs_raw); // Apply chrome and render module if (array_key_exists('style',$attribs) && function_exists($chromeMethod)) { $module->style = $attribs['style']; // Get module parameters $params = new Registry($module->params); ob_start(); $chromeMethod($module, $params, $attribs); $module->content = ob_get_contents(); ob_end_clean(); } return $module->content; } }