File Manager

Current Directory: /home/astoriaah/www/old15/administrator/components/com_akeeba/models
Viewing File: /home/astoriaah/www/old15/administrator/components/com_akeeba/models/extfilters.php
<?php /** * @package AkeebaBackup * @copyright Copyright (c)2009-2014 Nicholas K. Dionysopoulos * @license GNU General Public License version 3, or later * * @since 2.1 */ // Protect from unauthorized access defined('_JEXEC') or die(); use Akeeba\Engine\Factory; use Akeeba\Engine\Platform; /** * Extension Filters model * */ class AkeebaModelExtfilters extends F0FModel { private $jversion; public function __construct($options = array()) { JLoader::import('joomla.filesystem.file'); parent::__construct($options); } /** * Gets a list of installed non-core components * * @param bool $reload When true, it forces reloading the list (bust cache) * * @return array An array holding component information * @access public */ public function &getComponents($reload = false) { static $_data; if ( !$_data || $reload) { // Get a list of components $db = JFactory::getDBO(); $query = $db->getQuery(true) ->select(array( '*', $db->qn('element') . ' AS ' . $db->qn('option'), $db->qn('extension_id') . ' AS ' . $db->qn('id'), ))->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('component')) ->where($db->qn('protected') . ' = ' . $db->q('0')) ->order($db->qn('name')); $db->setQuery($query); $rows = $db->loadObjectList(); // Get a list of applied filters $filter = Factory::getFilterObject('components'); $_data = array(); $numRows = count($rows); for ($i = 0; $i < $numRows; $i++) { $row =& $rows[$i]; $_data[] = array( 'name' => $row->name, 'root' => 'default', 'item' => $row->option, 'status' => $filter->isFiltered($row->option, 'default', 'components', 'all') ); } } return $_data; } /** * Toggles the filtering status for a component * * @param string $root Filter root (for components it's always 'default') * @param string $item Component's option name (e.g. 'com_foobar') */ public function toggleComponentFilter($root, $item) { $filter = Factory::getFilterObject('components'); $filter->toggle($root, $item, $newStatus); $filters = Factory::getFilters(); $filters->save(); } /** * Gets an array of all installed modules. * * @param bool $reload Force reload of the list when true * * @return array * @access public */ public function &getModules($reload = false) { static $_data; if ( !$_data || $reload) { $db = JFactory::getDBO(); $query = $db->getQuery(true) ->select(array( '*', $db->qn('name') . ' AS ' . $db->qn('title'), $db->qn('element') . ' AS ' . $db->qn('module'), $db->qn('extension_id') . ' AS ' . $db->qn('id'), ))->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('module')) ->where($db->qn('protected') . ' = ' . $db->q('0')) ->order($db->qn('name')); $db->setQuery($query); $rows = $db->loadObjectList(); $_data = array(); $filter = Factory::getFilterObject('modules'); $n = count($rows); for ($i = 0; $i < $n; $i++) { $row = &$rows[$i]; $root = ($row->client_id == 0) ? 'frontend' : 'backend'; $_data[] = array( 'name' => $row->title, 'root' => $root, 'item' => $row->module, 'status' => $filter->isFiltered($row->module, $root, 'modules', 'all') ); } } return $_data; } /** * Toggles the filtering status for a module * * @param string $root Filter root (frontend|backend) * @param string $item Modules's option name (e.g. 'mod_foobar') */ public function toggleModuleFilter($root, $item) { $filter = Factory::getFilterObject('modules'); $filter->toggle($root, $item, $newStatus); $filters = Factory::getFilters(); $filters->save(); } public function &getPlugins($reload = false) { static $_data; if ( !$_data || $reload) { $db = JFactory::getDBO(); $query = $db->getQuery(true) ->select(array( '*', $db->qn('name') . ' AS ' . $db->qn('title'), $db->qn('element') . ' AS ' . $db->qn('module'), $db->qn('extension_id') . ' AS ' . $db->qn('id'), ))->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('plugin')) ->where($db->qn('protected') . ' = ' . $db->q('0')) ->order($db->qn('name')); $db->setQuery($query); $rows = $db->loadObjectList(); $_data = array(); $filter = Factory::getFilterObject('plugins'); $n = count($rows); for ($i = 0; $i < $n; $i++) { $row = &$rows[$i]; $_data[] = array( 'name' => $row->name, 'root' => $row->folder, 'item' => $row->element, 'status' => $filter->isFiltered($row->element, $row->folder, 'plugins', 'all') ); } } return $_data; } /** * Toggles the filtering status for a plugin * * @param string $root Filter root (plugin type) * @param string $item Modules's option name (e.g. 'plg_foobar') */ public function togglePluginFilter($root, $item) { $filter = Factory::getFilterObject('plugins'); $filter->toggle($root, $item, $newStatus); $filters = Factory::getFilters(); $filters->save(); } // ======================================================================== // Languages filter interface // ======================================================================== /** * Returns an annotated list of all front-end or back-end languages * * @param bool $frontend If true returns front-end languages, if false returns back-end languages * * @return array The annotated languages array */ private function &_getAllLanguages($frontend = true) { static $_feLanguages; static $_beLanguages; if ($frontend) { if ( !$_feLanguages) { $_feLanguages = array(); JLoader::import('joomla.filesystem.folder'); // Get the site languages $langBDir = JLanguage::getLanguagePath(JPATH_SITE); $langDirs = JFolder::folders($langBDir); for ($i = 0; $i < count($langDirs); $i++) { // Try to find VALID languages, by scanning and parsing their XML files $row = array(); $row['language'] = $langDirs[$i]; $row['basedir'] = $langBDir; $files = JFolder::files($langBDir . '/' . $langDirs[$i], '^([-_A-Za-z]*)\.xml$'); foreach ($files as $file) { $data = JApplicationHelper::parseXMLLangMetaFile($langBDir . '/' . $langDirs[$i] . '/' . $file); // If we didn't get valid data from the xml file, move on... if ( !is_array($data)) { continue; } // Populate the row from the xml meta file foreach ($data as $key => $value) { $row[$key] = $value; } $clientVals = JApplicationHelper::getClientInfo(0); $lang = JComponentHelper::getParams('com_languages'); $row['default'] = ($lang->get($clientVals->name, 'en-GB') == basename($row['language'])); } if (isset($row['default'])) { $_feLanguages[] = $row; } } } return $_feLanguages; } else { if ( !$_beLanguages) { $_beLanguages = array(); JLoader::import('joomla.filesystem.folder'); // Get the site languages $langBDir = JLanguage::getLanguagePath(JPATH_ADMINISTRATOR); $langDirs = JFolder::folders($langBDir); for ($i = 0; $i < count($langDirs); $i++) { // Try to find VALID languages, by scanning and parsing their XML files $row = array(); $row['language'] = $langDirs[$i]; $row['basedir'] = $langBDir; $files = JFolder::files($langBDir . '/' . $langDirs[$i], '^([-_A-Za-z]*)\.xml$'); foreach ($files as $file) { $data = JApplicationHelper::parseXMLLangMetaFile($langBDir . '/' . $langDirs[$i] . '/' . $file); // If we didn't get valid data from the xml file, move on... if ( !is_array($data)) { continue; } // Populate the row from the xml meta file foreach ($data as $key => $value) { $row[$key] = $value; } $clientVals = JApplicationHelper::getClientInfo(1); $lang = JComponentHelper::getParams('com_languages'); $row['default'] = ($lang->get($clientVals->name, 'en-GB') == basename($row['language'])); } if (isset($row['default'])) { $_beLanguages[] = $row; } } } return $_beLanguages; } } public function &getLanguages($reload = false) { static $_data; if ( !$_data || $reload) { $_data = array(); $filter = Factory::getFilterObject('languages'); // Add non-default front-end languages $feLang = $this->_getAllLanguages(true); if (count($feLang) > 0) { foreach ($feLang as $lang) { if ( !$lang['default']) { $lang['name'] = $lang['language']; $lang['item'] = $lang['language']; $lang['root'] = 'frontend'; $lang['status'] = $filter->isFiltered($lang['language'], 'frontend', 'languages', 'all'); $_data[] = $lang; } } } // Add non-default back-end languages $beLang = $this->_getAllLanguages(false); if (count($beLang) > 0) { foreach ($beLang as $lang) { if ( !$lang['default']) { $lang['name'] = $lang['language']; $lang['item'] = $lang['language']; $lang['root'] = 'backend'; $lang['status'] = $filter->isFiltered($lang['language'], 'backend', 'languages', 'all'); $_data[] = $lang; } } } } return $_data; } public function toggleLanguageFilter($root, $item) { $filter = Factory::getFilterObject('languages'); $filter->toggle($root, $item, $newStatus); $filters = Factory::getFilters(); $filters->save(); } /** * Returns an annotated list of all front-end or back-end templates * * @param bool $frontend If true returns front-end templates, if false returns back-end templates * * @return array The annotated templates array */ private function &_getAllTemplates($frontend = true) { static $_feTemplates; static $_beTemplates; if ($frontend) { if ( !$_feTemplates) { $_feTemplates = array(); JLoader::import('joomla.filesystem.folder'); // Get the site languages $tempBDir = JPATH_SITE . '/templates'; $tempDirs = JFolder::folders($tempBDir); // Get a list of the currently active templates $db = $this->getDBO(); $query = $db->getQuery(true) ->select(array( '*', $db->qn('element') . ' AS ' . $db->qn('template'), $db->qn('extension_id') . ' AS ' . $db->qn('id'), ))->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('template')) ->where($db->qn('protected') . ' = ' . $db->q('0')) ->where($db->qn('client_id') . ' = ' . $db->q('0')) ->order($db->qn('name')); $db->setQuery($query); $activeList = $db->loadColumn(); for ($i = 0; $i < count($tempDirs); $i++) { // Try to find VALID templates, by scanning and parsing their XML files $row = array(); $row['template'] = $tempDirs[$i]; $row['basedir'] = $tempBDir; $files = JFolder::files($tempBDir . '/' . $tempDirs[$i], '.xml$'); foreach ($files as $file) { $data = JApplicationHelper::parseXMLInstallFile($tempBDir . '/' . $tempDirs[$i] . '/' . $file); // If we didn't get valid data from the xml file, move on... if ( !is_array($data)) { continue; } // Populate the row from the xml meta file foreach ($data as $key => $value) { $row[$key] = $value; } $row['client_id'] = 0; $row['default'] = (in_array($row['template'], $activeList)); } if (isset($row['default'])) { $_feTemplates[] = $row; } } } return $_feTemplates; } else { if ( !$_beTemplates) { $_beTemplates = array(); JLoader::import('joomla.filesystem.folder'); // Get the site languages $tempBDir = JPATH_ADMINISTRATOR . '/templates'; $tempDirs = JFolder::folders($tempBDir); // Get a list of the currently active templates $db = $this->getDBO(); $query = $db->getQuery(true) ->select(array( '*', $db->qn('element') . ' AS ' . $db->qn('template'), $db->qn('extension_id') . ' AS ' . $db->qn('id'), ))->from($db->qn('#__extensions')) ->where($db->qn('type') . ' = ' . $db->q('template')) ->where($db->qn('protected') . ' = ' . $db->q('0')) ->where($db->qn('client_id') . ' = ' . $db->q('1')) ->order($db->qn('name')); $db->setQuery($query); $activeList = $db->loadColumn(); for ($i = 0; $i < count($tempDirs); $i++) { // Try to find VALID languages, by scanning and parsing their XML files $row = array(); $row['template'] = $tempDirs[$i]; $row['basedir'] = $tempBDir; $files = JFolder::files($tempBDir . '/' . $tempDirs[$i], '.xml$'); foreach ($files as $file) { $data = JApplicationHelper::parseXMLInstallFile($tempBDir . '/' . $tempDirs[$i] . '/' . $file); // If we didn't get valid data from the xml file, move on... if ( !is_array($data)) { continue; } // Populate the row from the xml meta file foreach ($data as $key => $value) { $row[$key] = $value; } $row['client_id'] = 1; $row['default'] = (in_array($row['template'], $activeList)); } if (isset($row['default'])) { $_beTemplates[] = $row; } } } return $_beTemplates; } } public function &getTemplates($reload = false) { static $_data; if ( !$_data || $reload) { $_data = array(); $filter = Factory::getFilterObject('templates'); // Add non-default front-end templates $feTemp = $this->_getAllTemplates(true); if (count($feTemp) > 0) { foreach ($feTemp as $temp) { if ( !$temp['default']) { $temp['name'] = $temp['template']; $temp['item'] = $temp['template']; $temp['root'] = 'frontend'; $temp['status'] = $filter->isFiltered($temp['template'], 'frontend', 'templates', 'all'); $_data[] = $temp; } } } // Add non-default back-end templates $beTemp = $this->_getAllTemplates(false); if (count($beTemp) > 0) { foreach ($beTemp as $temp) { if ( !$temp['default']) { $temp['name'] = $temp['template']; $temp['item'] = $temp['template']; $temp['root'] = 'backend'; $temp['status'] = $filter->isFiltered($temp['template'], 'backend', 'templates', 'all'); $_data[] = $temp; } } } } return $_data; } public function toggleTemplateFilter($root, $item) { $filter = Factory::getFilterObject('templates'); $filter->toggle($root, $item, $newStatus); $filters = Factory::getFilters(); $filters->save(); } }