* @copyright Copyright © 2019 Delo Design & NorrNext. All rights reserved. * @license GNU General Public License version 3 or later; see license.txt * @link https://www.norrnext.com */ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\FileLayout; class QuantummanagerbuttonHelper { /** * @var * @since version */ public static $template; public static function loadLang() { Factory::getLanguage()->load('plg_editors-xtd_quantummanagerbutton', JPATH_ADMINISTRATOR); } /** * * @return array * * @since version */ public static function getFieldsForScopes() { $db = Factory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName(array('params'))) ->from('#__extensions') ->where('element=' . $db->quote('quantummanagerbutton')); $extension = $db->setQuery($query)->loadObject(); $params = json_decode($extension->params, JSON_OBJECT_AS_ARRAY); if (!isset($params['scopes']) || empty($params['scopes']) || count((array) $params['scopes']) === 0) { $scopes = self::defaultValues(); $scopes_custom = []; } else { $scopes = $params['scopes']; $scopes_custom = $params['customscopes'] ?? []; } $output = []; foreach ($scopes as $scope) { $scope = (array) $scope; $output[$scope['id']] = [ 'title' => $scope['title'], 'fieldsform' => $scope['fieldsform'] ]; } foreach ($scopes_custom as $scope) { $scope = (array) $scope; $output[$scope['id']] = [ 'title' => $scope['title'], 'fieldsform' => $scope['fieldsform'] ]; } return $output; } /** * * @return array * * @since version */ public static function getTemplateListForScopes() { $db = Factory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName(array('params'))) ->from('#__extensions') ->where('element=' . $db->quote('quantummanagerbutton')); $extension = $db->setQuery($query)->loadObject(); $params = json_decode($extension->params, JSON_OBJECT_AS_ARRAY); if (!isset($params['scopes']) || empty($params['scopes']) || count((array) $params['scopes']) === 0) { $scopes = self::defaultValues(); $scopes_custom = []; } else { $scopes = $params['scopes']; $scopes_custom = $params['customscopes'] ?? []; } foreach ($scopes_custom as $scope) { $scopes[count($scopes)] = $scope; } $output = []; foreach ($scopes as $scope) { $scope = (array) $scope; $templatelist = []; $templatelistFromScope = $scope['templatelist']; if (!is_array($templatelistFromScope)) { $templatelistFromScope = [ [ 'templatename' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_NAME_DEFAULT'), 'template' => '{name}' ] ]; } foreach ($templatelistFromScope as $keyTemplate => $template) { $templateItem = ''; if (preg_match("#^\{\{.*?\}\}$#isu", trim($template['template']))) { $layoutId = str_replace(['{', '}'], '', $template['template']); $templateItem = self::renderLayout($layoutId); } else { $templateItem = $template['template']; } $enablefields = []; $matches = []; preg_match_all("#\{(.*?)\}#isu", $templateItem, $matches); if (isset($matches[1])) { foreach ($matches[1] as $findField) { if (!in_array($findField, $enablefields)) { $enablefields[] = $findField; } } } $templatelist[] = [ 'name' => $template['templatename'], 'enablefields' => $enablefields, ]; } $output[$scope['id']] = [ 'title' => $scope['title'], 'templatelist' => $templatelist ]; } return $output; } /** * @param $layoutId * * @return string * * @throws Exception * @since version */ public static function renderLayout($layoutId) { $app = Factory::getApplication(); $template = $app->getTemplate(); if (empty(self::$template)) { $db = Factory::getDbo(); $query = $db->getQuery(true); $query->select('template') ->from('#__template_styles as e') ->where('e.client_id = 0') ->where('e.home = 1') ->setLimit(1); $db->setQuery($query); $template = $db->loadObject(); if (isset($template->template)) { self::$template = $template->template; } } $layout = new FileLayout($layoutId); $layout->addIncludePath([ JPATH_ROOT . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['templates', self::$template, 'layouts', 'plg_quantummanagcontent']), JPATH_ROOT . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['templates', self::$template, 'html', 'layouts', 'plg_quantummanagcontent']), JPATH_ROOT . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['templates', self::$template, 'html', 'layouts', 'plg_content_quantummanagercontent']), JPATH_ROOT . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['templates', self::$template, 'html', 'plg_content_quantummanagercontent']), JPATH_ROOT . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['templates', self::$template, 'html', 'plg_quantummanagcontent']), JPATH_ROOT . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, ['templates', self::$template, 'html', 'plg_button_quantummanagerbutton']), ]); $output = $layout->render(); return $output; } /** * * @return array * * @since version */ public static function defaultValues() { $lang = Factory::getLanguage(); $lang->load('plg_editors-xtd_quantummanagerbutton', JPATH_ADMINISTRATOR); $lang->load('com_quantummanager', JPATH_ROOT . '/administrator/components/com_quantummanager'); return [ 'images' => (object) [ 'id' => 'images', 'title' => Text::_('COM_QUANTUMMANAGER_SCOPE_IMAGES'), 'templatelist' => [ 'templatelist0' => [ 'templatename' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_NAME_IMAGE'), 'templatebefore' => '', 'template' => '{alt}', 'templateafter' => '', ] ], 'fieldsform' => [ 'fieldsform0' => [ 'nametemplate' => 'width', 'name' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_IMAGES_FIELDSFORM_WIDTH_NAME'), 'default' => '', 'type' => 'number', ], 'fieldsform1' => [ 'nametemplate' => 'height', 'name' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_IMAGES_FIELDSFORM_HEIGHT_NAME'), 'default' => '', 'type' => 'number', ], 'fieldsform3' => [ 'nametemplate' => 'alt', 'name' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_IMAGES_FIELDSFORM_ALT_NAME'), 'default' => '', 'type' => 'text', ] ] ], 'docs' => (object) [ 'id' => 'docs', 'title' => Text::_('COM_QUANTUMMANAGER_SCOPE_DOCS'), 'templatelist' => [ 'templatelist0' => [ 'templatename' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_NAME_DOC'), 'templatebefore' => '', 'template' => '{name}', 'templateafter' => '', ] ], 'fieldsform' => [ 'fieldsform0' => [ 'nametemplate' => 'name', 'name' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_DOCS_FIELDSFORM_NAME_NAME'), 'default' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_IMAGES_FIELDSFORM_DEFAULT_NAME'), 'type' => 'text', ], ] ], 'music' => (object) [ 'id' => 'music', 'title' => Text::_('COM_QUANTUMMANAGER_SCOPE_MUSIC'), 'templatelist' => [ 'templatelist0' => [ 'templatename' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_NAME_AUDIO'), 'templatebefore' => '', 'template' => '', 'templateafter' => '', ] ], 'fieldsform' => '', ], 'videos' => (object) [ 'id' => 'videos', 'title' => Text::_('COM_QUANTUMMANAGER_SCOPE_VIDEOS'), 'templatelist' => [ 'templatelist0' => [ 'templatename' => Text::_('PLG_BUTTON_QUANTUMMANAGERBUTTON_SCOPES_NAME_VIDEO'), 'templatebefore' => '', 'template' => '', 'templateafter' => '', ] ], 'fieldsform' => '', ] ]; } }