* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Templates\Administrator\Helper; use Joomla\CMS\Factory; use Joomla\CMS\Filesystem\Path; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Installer\Installer; use Joomla\CMS\Language\Text; use Joomla\CMS\Object\CMSObject; use Joomla\Database\ParameterType; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Templates component helper. * * @since 1.6 */ class TemplatesHelper { /** * Get a list of filter options for the application clients. * * @return array An array of HtmlOption elements. */ public static function getClientOptions() { // Build the filter options. $options = array(); $options[] = HTMLHelper::_('select.option', '0', Text::_('JSITE')); $options[] = HTMLHelper::_('select.option', '1', Text::_('JADMINISTRATOR')); return $options; } /** * Get a list of filter options for the templates with styles. * * @param mixed $clientId The CMS client id (0:site | 1:administrator) or '*' for all. * * @return array */ public static function getTemplateOptions($clientId = '*') { // Build the filter options. $db = Factory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('element', 'value')) ->select($db->quoteName('name', 'text')) ->select($db->quoteName('extension_id', 'e_id')) ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('template')) ->where($db->quoteName('enabled') . ' = 1') ->order($db->quoteName('client_id') . ' ASC') ->order($db->quoteName('name') . ' ASC'); if ($clientId != '*') { $clientId = (int) $clientId; $query->where($db->quoteName('client_id') . ' = :clientid') ->bind(':clientid', $clientId, ParameterType::INTEGER); } $db->setQuery($query); $options = $db->loadObjectList(); return $options; } /** * @param string $templateBaseDir * @param string $templateDir * * @return boolean|CMSObject */ public static function parseXMLTemplateFile($templateBaseDir, $templateDir) { $data = new CMSObject(); // Check of the xml file exists $filePath = Path::clean($templateBaseDir . '/templates/' . $templateDir . '/templateDetails.xml'); if (is_file($filePath)) { $xml = Installer::parseXMLInstallFile($filePath); if ($xml['type'] != 'template') { return false; } foreach ($xml as $key => $value) { $data->set($key, $value); } } return $data; } /** * @param integer $clientId * @param string $templateDir * * @return boolean|array * * @since 3.0 */ public static function getPositions($clientId, $templateDir) { $positions = array(); $templateBaseDir = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE; $filePath = Path::clean($templateBaseDir . '/templates/' . $templateDir . '/templateDetails.xml'); if (is_file($filePath)) { // Read the file to see if it's a valid component XML file $xml = simplexml_load_file($filePath); if (!$xml) { return false; } // Check for a valid XML root tag. // Extensions use 'extension' as the root tag. Languages use 'metafile' instead if ($xml->getName() != 'extension' && $xml->getName() != 'metafile') { unset($xml); return false; } $positions = (array) $xml->positions; if (isset($positions['position'])) { $positions = (array) $positions['position']; } else { $positions = array(); } } return $positions; } }